femike/yii2-amqp-rrobin

基于 AMQP 的 Yii 2 扩展,用于通过 AMQP 与 RabbitMQ 服务器通信。基于 videlalvaro/php-amqplib,并从 webtoucher/yii2-amqp 分支出来,支持轮询

安装次数: 7,581

依赖者: 0

推荐者: 0

安全: 0

星标: 1

关注者: 2

分支: 41

类型:yii-extension

v1.0.1 2016-06-10 17:42 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:39:55 UTC


README

AMQP 扩展包装器,用于与 RabbitMQ 服务器通信。基于 videlalvaro/php-amqplib

安装

安装此扩展的最佳方式是通过 composer

运行以下命令:

$ php composer.phar require femike/yii2-amqp-rrobin "*"

或者

"femike/yii2-amqp-rrobin": "*"

将以下内容添加到您的 composer.json 文件的 require 部分:

在您的控制台配置中添加以下内容:

return [
    ...
    'components' => [
        ...
        'amqp' => [
            'class' => 'webtoucher\amqp\components\Amqp',
            'host' => '127.0.0.1',
            'port' => 5672,
            'user' => 'your_login',
            'password' => 'your_password',
            'vhost' => '/',
        ],
        ...
    ],
    ...
    'controllerMap' => [
        ...
        'rabbit' => [
            'class' => 'webtoucher\amqp\controllers\AmqpListenerController',
            'interpreters' => [
                'my-exchange' => 'app\components\RabbitInterpreter', // interpreters for each exchange
            ],
            'exchange' => 'my-exchange', // default exchange
        ],
        ...
    ],
    ...
];

添加消息解释器类 @app/components/RabbitInterpreter,并为不同的路由键添加您的处理程序

<?php

namespace app\components;

use webtoucher\amqp\components\AmqpInterpreter;


class RabbitInterpreter extends AmqpInterpreter
{
    /**
     * Interprets AMQP message with routing key 'hello_world'.
     *
     * @param array $message
     */
    public function readHelloWorld($message)
    {
        // todo: write message handler
        $this->log(print_r($message, true));
    }
}

使用方法

只需运行以下命令:

$ php yii rabbit

以监听默认交换机上的任何路由键的主题

$ php yii rabbit my_routing_key

或者监听一个路由键的主题

运行以下命令:

$ php yii rabbit my_routing_key direct --exchange=my_exchange

以监听选定交换机上的直接消息

您还可以创建满足您需求的控制器。只需将您的 Web 控制器类 webtoucher\amqp\controllers\AmqpConsoleController 用于代替 yii\web\Controller,并将您的控制台控制器类 webtoucher\amqp\controllers\AmqpConsoleController 用于代替 yii\console\Controller。AMQP 连接将通过属性 connection 可用。AMQP 通道将通过属性 channel 可用。

轮询示例使用

<?php
namespace console\controllers;

use webtoucher\amqp\components\Amqp;
use Yii;
use yii\console\Controller;

class ExampleController extends Controller
{
	public function actionIndex($message = 'Wasap Man')
	{
		Yii::$app->amqp->send('my-exchange', 'HelloWorld', $message, Amqp::TYPE_DIRECT, true);
	}
}

运行相同的监听消费者

1st$ php yii rabbit HelloWorld direct true
2nd$ php yii rabbit HelloWorld direct true

从控制台控制器发送消息

$ php yii example 

或者

$ php yii example "same text"