Swoft 2.0.3重大な更新、優雅なマイクロサービスガバナンスの発表
Swoftとは?
Swoftは、Swoole拡張に基づいて実現されたPHPマイクロサービス連携フレームワークである.SwoftはGoのように、従来のPHP-FPMに依存せずに、コモンネットワークサーバと一般的なコモンクライアントを内蔵し、メモリを常駐させることができる.Go言語のようなコラボレーション操作方式があり、Spring Cloudフレームワークのような柔軟な注釈、強力なグローバル依存注入容器、完全なサービスガバナンス、柔軟で強力なAOP、標準的なPSR規範の実現などがある.
Swoftは3年間にわたる蓄積と方向の探索を通じて、SwoftをPHP界のSpring Cloudにし、PHP高性能フレームワークとマイクロサービスガバナンスの最適な選択である.
優雅なサービスガバナンス
Swoftの公式提案開発者は、Istio/Envoyフレームワークのようなサービスmeshモデルを使用して、ビジネスとサービスガバナンスを分離することを提案していますが、Swoftは中小規模企業にマイクロサービスを迅速に構築するためにマイクロサービスコンポーネントを提供しています.サービス登録と発見 サービス溶断 サービスストリーム 配置センタ サービスの登録と検出
サービス登録と発見は、Swoftが公式に提供しているswoft-consulコンポーネントを使用する必要があります.他のサードパーティも同様です.
登録とキャンセルサービス
サービス発見
サービスプロバイダの定義
サービスプロバイダの設定
サービスヒューズ
Swoftは
サービス制限フロー
Swoftでは
コンフィギュレーションセンタ
センターを構成するには、Swoftが公式に提供するSwoft-apolloコンポーネントを使用する必要があります.他のサードパーティも同様です.
エージェントの宣言
エージェントの起動
Agentは、サービス(Http/RPC/Websocket)が起動する前に実行するだけです.
コンテンツの更新
除去(Remove) 新規(Enhancement):新規インタフェース依存注入(6169 f 84) 新規 を取得する.新規 新規呼び出し1.x RPCサービスサポート(30 d 73 c 3) AOPクラス名マッチング追加正規表現(bc 5 e 479) をサポート RPC Server/Http Serverミドルウェアネーミングスペース 新規ベリファイア除外属性フィールド 自動書き込みタイムスタンプ(dc 58011) を追加モデルアクションイベント(dc 58011) を追加新規データベース移行(26 bb 464) エンティティがjsonおよび配列と自動的に相互に回転する(dc 58011) 新規モデル一括更新方法 修復(Fixed): cookies設定時のいくつかの問題を修復し、withCookie関連方法(b 05 afbb 01) を追加します. consoleがコモン方式でコマンドを実行する場合、処理エラー(8 a 5418 bf) がキャプチャされなかったことを修復する. websocket server再起動コマンドが古いserver問題を先に停止していないことを修復する(db 2 d 935) 修復タスク戻り値 RPC Serverがクラスミドルウェアのみ使用できない問題を修正する()204 bc 7 f RPC Server戻り値 ロガーおよびCLogログレベルが上書きできない問題および無効な問題を修正する(8 eb 8 aba) 修復モデルのプロパティはカスタム式(dc 58011) をサポートしていません.
更新(Update):ベリファイア最適化、カスタム検証ルール(d 959 a 4 f) をサポート名前変更エラー処理管理クラス である. consoleコンポーネントの異常処理はerrorコンポーネントが提供する統一処理スタイル(4 f 47204) に変更された. consoleコンポーネントは、無効化コマンドグループ(c 5 a 0269) を設定することを可能にする.デフォルトのエラー処理では、エラーキャプチャレベルの設定を許可します.デフォルトレベルは です. ws serverの起動を最適化すると同時にhttp処理機能が有効になり、情報パネル追加プロンプト(83 a 81170) ws serverの起動を最適化し、rpc serverの起動を同時に追加する.情報パネルにはrpc server情報(3 d 1 d 0 d 848) が表示されない.
拡張(Extra):ドキュメント追加サポートgoogleによる検索 apolloコンポーネント を追加 consulコンポーネント を追加 breakerコンポーネント を追加 limterコンポーネント を追加
しげん Gitee: https://gitee.com/swoft/swoft GitHub: https://github.com/swoft-cloud/swoft 公式サイト:https://www.swoft.org ドキュメント:https://www.swoft.org/docs
Swoftは、Swoole拡張に基づいて実現されたPHPマイクロサービス連携フレームワークである.SwoftはGoのように、従来のPHP-FPMに依存せずに、コモンネットワークサーバと一般的なコモンクライアントを内蔵し、メモリを常駐させることができる.Go言語のようなコラボレーション操作方式があり、Spring Cloudフレームワークのような柔軟な注釈、強力なグローバル依存注入容器、完全なサービスガバナンス、柔軟で強力なAOP、標準的なPSR規範の実現などがある.
Swoftは3年間にわたる蓄積と方向の探索を通じて、SwoftをPHP界のSpring Cloudにし、PHP高性能フレームワークとマイクロサービスガバナンスの最適な選択である.
優雅なサービスガバナンス
Swoftの公式提案開発者は、Istio/Envoyフレームワークのようなサービスmeshモデルを使用して、ビジネスとサービスガバナンスを分離することを提案していますが、Swoftは中小規模企業にマイクロサービスを迅速に構築するためにマイクロサービスコンポーネントを提供しています.
サービス登録と発見は、Swoftが公式に提供しているswoft-consulコンポーネントを使用する必要があります.他のサードパーティも同様です.
登録とキャンセルサービス
SwooleEvent::START
イベントの傍受、登録サービス/**
* Class RegisterServiceListener
*
* @since 2.0
*
* @Listener(event=SwooleEvent::START)
*/
class RegisterServiceListener implements EventHandlerInterface
{
/**
* @Inject()
*
* @var Agent
*/
private $agent;
/**
* @param EventInterface $event
*/
public function handle(EventInterface $event): void
{
/* @var HttpServer $httpServer */
$httpServer = $event->getTarget();
$service = [
// ....
];
$scheduler = Swoole\Coroutine\Scheduler();
$scheduler->add(function () use ($service) {
// Register
$this->agent->registerService($service);
CLog::info('Swoft http register service success by consul!');
});
$scheduler->start();
}
}
SwooleEvent::SHUTDOWN
イベントをリスニングし、サービスをキャンセル/**
* Class DeregisterServiceListener
*
* @since 2.0
*
* @Listener(SwooleEvent::SHUTDOWN)
*/
class DeregisterServiceListener implements EventHandlerInterface
{
/**
* @Inject()
*
* @var Agent
*/
private $agent;
/**
* @param EventInterface $event
*/
public function handle(EventInterface $event): void
{
/* @var HttpServer $httpServer */
$httpServer = $event->getTarget();
$scheduler = Swoole\Coroutine\Scheduler();
$scheduler->add(function () use ($httpServer) {
$this->agent->deregisterService('swoft');
});
$scheduler->start();
}
}
サービス発見
サービスプロバイダの定義
/**
* Class RpcProvider
*
* @since 2.0
*
* @Bean()
*/
class RpcProvider implements ProviderInterface
{
/**
* @Inject()
*
* @var Agent
*/
private $agent;
/**
* @param Client $client
*
* @return array
* @example
* [
* 'host:port'
* ]
*/
public function getList(Client $client): array
{
// Get health service from consul
$services = $this->agent->services();
$services = [
];
return $services;
}
}
サービスプロバイダの設定
return [
'user' => [
'class' => ServiceClient::class,
'provider' => bean(RpcProvider::class)
// ...
]
];
サービスヒューズ
Swoftは
@Breaker
注記を用いて溶断を実現し、任意の方法の上で溶断操作を行うことができる./**
* Class BreakerLogic
*
* @since 2.0
*
* @Bean()
*/
class BreakerLogic
{
/**
* @Breaker(fallback="funcFallback")
*
* @return string
* @throws Exception
*/
public function func(): string
{
// Do something
throw new Exception('Breaker exception');
}
/**
* @return string
*/
public function funcFallback(): string
{
return 'funcFallback';
}
}
サービス制限フロー
Swoftでは
@RateLimiter
注記を使用してサービス制限フローを実現し、コントローラだけでなく任意の方法で制限フローを実現することができ、KEYはsymfony/expression-language式をサポートする./**
* Class LimiterController
*
* @since 2.0
*
* @Controller(prefix="limiter")
*/
class LimiterController
{
/**
* @RequestMapping()
* @RateLimiter(key="request.getUriPath()", fallback="limiterFallback")
*
* @param Request $request
*
* @return array
*/
public function requestLimiter(Request $request): array
{
$uri = $request->getUriPath();
return ['requestLimiter', $uri];
}
/**
* @param Request $request
*
* @return array
*/
public function limiterFallback(Request $request): array
{
$uri = $request->getUriPath();
return ['limiterFallback', $uri];
}
}
コンフィギュレーションセンタ
センターを構成するには、Swoftが公式に提供するSwoft-apolloコンポーネントを使用する必要があります.他のサードパーティも同様です.
エージェントの宣言
/**
* Class AgentCommand
*
* @since 2.0
*
* @Command("agent")
*/
class AgentCommand
{
/**
* @Inject()
*
* @var Config
*/
private $config;
/**
* @CommandMapping(name="index")
*/
public function index(): void
{
$namespaces = [
'application'
];
while (true) {
try {
$this->config->listen($namespaces, [$this, 'updateConfigFile']);
} catch (Throwable $e) {
CLog::error('Config agent fail(%s %s %d)!', $e->getMessage(), $e->getFile(), $e->getLine());
}
}
}
/**
* @param array $data
*
* @throws ContainerException
* @throws ReflectionException
*/
public function updateConfigFile(array $data): void
{
foreach ($data as $namespace => $namespaceData) {
$configFile = sprintf('@config/%s.php', $namespace);
$configKVs = $namespaceData['configurations'] ?? '';
$content = 'restart();
}
}
}
エージェントの起動
Agentは、サービス(Http/RPC/Websocket)が起動する前に実行するだけです.
php bin/swoft agent:index
コンテンツの更新
除去(Remove)
request->json()
除去方法(c 9 e 8 f 04)getFile
メソッドファイルアップロード保存後の情報(fe 7 e 3 a 6)restart()
サービス新規再開方法(2 ffec 37)use
エラーメッセージ(b 1 cec 04)unfields
(b 1 bf 44 f)batchUpdateByIds
(dc 58011)null
問題(a 69347 c)null
の問題を修正(4 d 091 be)更新(Update):
ErrorHanlders
はErrorManager
(f 3 a 8 f 04 b)E_ALL | E_STRICT
(aff 9029)拡張(Extra):
しげん