hzted123/yii2-amqp

AMQP消费者管理工具

安装次数: 3,926

依赖者: 0

建议者: 0

安全: 0

星标: 3

关注者: 2

分支: 1

开放问题: 1

类型:yii2-extension

1.0.4 2017-05-10 11:59 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:47:45 UTC


README

一个用于管理AMQP消费者的工具。它可以配置声明交换和队列。并通过cron作业保持消费者存活。

此扩展基于。感谢webtoucher

但是有一些改动

  • 通过队列设置消费者,而不是路由或交换
  • 所有交换和队列设置都在配置中
  • 添加监听管理控制器

安装

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

运行以下命令

php composer.phar require --prefer-dist hzted123/yii2-amqp "*"

或者在您的composer.json文件的require部分添加

"hzted123/yii2-amqp": "*"

用法

扩展安装后,只需在代码中简单使用即可

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

return [
    ...
    'components' => [
        ...
        'amqp' => [
            'class' => 'hzted123\amqp\components\Amqp',
            'host' => '******',
            'port' => 5672,
            'user' => '******',
            'password' => '******',
            'vhost' => '/',
            'exchange_configs' => [
                'exchange_name' => [
                    'options' => ['type' => 'topic', 'passive' => false, 'auto_delete' => false, 'durable' => true ],
                ],
                ... ...
            ],
            'queue_configs' => [
                'queue_name'    =>  [
                    'options' => ['passive' => false, 'auto_delete' => false, 'durable' => true, 'exclusive' => false],
                    'arguments' => ['x-max-length' => ['I', 1000000], 'x-max-length-bytes' => ['I', 300485760]],
                    'binds' => ['route' => 'exchange_name']
                ],
                ... ... 
            ],
        ],
    ],
    ...
    'controllerMap' => [
        'cron' => [
            'class' => 'mitalcoi\cronjobs\CronController',
            'interpreterPath' => '/usr/bin/php',
            'logsDir' => '/data/logs/cron',
            'logFileName' => '%L/php-%C.%A.%D.log',
            'bootstrapScript' => (dirname(dirname(__FILE__)) .'/yii',
            'cronJobs' =>[
                'listener-manage/keep' => [
                    'cron'      => '* * * * *',
                ]
            ],
        ],
        'listener' => [
            'class' => 'hzted123\amqp\controllers\AmqpListenerController',
            'interpreters' => [
                'queue_name' => '@app\components\DemoEventInterpreter', // interpreters for each queue
            ],
        ],
        'listener-manage' => [      //consumer keeper
            'class' => 'hzted123\amqp\controllers\ListenerManageController',
            'configs' => [
                ['queue' => 'queue_name', 'count' => 2]      // Keeping the number of consumers
            ]
        ],
    ],
];

添加消息解释器类@app/components/DemoEventInterpreter以及不同路由键的处理程序

<?php

namespace app\components;

use hzted123\amqp\components\AmqpInterpreter;


class DemoEventInterpreter 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 listener-manage keep

或这样

* * * * * php yii listener-manage keep

运行以下命令

$ php yii listener-manage kill

在部署新代码时杀死所有消费者

运行以下命令

$ php yii listener --queue=queue_name

来监听选定队列

您还可以根据需要创建控制器。只需使用hzted123\amqp\controllers\AmqpConsoleController代替yii\web\Controller作为您的web控制器类,并使用hzted123\amqp\controllers\AmqpConsoleController代替yii\console\Controller作为您的控制台控制器类。AMQP连接将在connection属性中可用。AMQP通道将在channel属性中可用。

注意:从版本1.0.2开始,配置信息,包括交换和路由切换位置,对于多个路由绑定到一个队列

    'queue_configs' => [
        'queue_name'    =>  [
            'options' => ['passive' => false, 'auto_delete' => false, 'durable' => true, 'exclusive' => false],
            'arguments' => ['x-max-length' => ['I', 1000000], 'x-max-length-bytes' => ['I', 300485760]],
            'binds' => ['route' => 'exchange_name']
        ],
        ... ... 
    ],