mamatveev / yii2-rabbitmq-rpc
Yii2 rpc 客户端和服务器类
dev-master
2022-03-02 19:22 UTC
Requires
- php-amqplib/thumper: ^0.5.0
- yiisoft/yii2: ^2.0
This package is auto-updated.
Last update: 2024-09-29 04:36:44 UTC
README
该组件旨在快速、方便地在 yii2 应用中使用 RabbitMQ 队列服务器。并行执行任务是其创建的主要目标。
安装
composer require mamatveev/yii2-rabbitmq-rpc:@dev
在应用配置中添加组件配置
return [ 'components' => [ 'rpc' => [ 'class' => 'mamatveev\yii2rabbitmq\RabbitComponent', 'host' => '127.0.0.1', 'port' => 5672, 'user' => 'guest', 'password' => 'guest' ], ];
使用方法
要测试组件的功能,创建一个简单的控制台控制器
<?php namespace app\commands; use mamatveev\yii2rabbitmq\RabbitComponent; use yii\console\Controller; class RpcController extends Controller { public function actionRabbitServer() { /** @var RabbitComponent $rpc */ $rpc = \Yii::$app->rpc; $rpcServer = $rpc->initServer('exchange-name'); $callback = function($msg){ $result = "msg from client: " . print_r($msg, true); echo $result."\n"; sleep(1); return $result; }; $rpcServer->setCallback($callback); $rpcServer->start(); } public function actionRabbitClient() { /** @var RabbitComponent $rpc */ $rpc = \Yii::$app->rpc; // init a client $rpcClient = $rpc->initClient('exchange-name'); // send a messages to exchange for ($i = 0; $i < 5; $i++) { $rpcClient->addRequest("message number {$i}, getReplies() test"); } // get all responses from rpc server print_r($rpcClient->getReplies()); for ($i = 0; $i < 5; $i++) { $rpcClient->addRequest("message number {$i}, getReplies() with callback"); } // use callback for responses $rpcClient->getReplies(function($msg) { echo "server reply callback... response is {$msg}\n"; }); for ($i = 0; $i < 5; $i++) { $rpcClient->addRequest("message number {$i}, waitExecution() test"); } // wait messages execution without getting any response $rpcClient->waitExecution(); // any message object will be serialized $message = new \stdClass(); $message->some_property = 2; $rpcClient->addRequest($message); } }
运行 RPC 服务器,执行以下 bash 命令
./yii rpc/rabbit-server
然后在另一个 bash 标签页中运行客户端控制器操作
./yii rpc/rabbit-client