mamatveev / yii2-rabbitmq-rpc

Yii2 rpc 客户端和服务器类

安装次数2,394

依赖项: 0

建议者: 0

安全: 0

星标: 3

关注者: 2

分支: 2

开放问题: 0

类型:yii2-extension

dev-master 2022-03-02 19:22 UTC

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