maksimdimitrov/mdim-amqp-laravel

php-amqplib 的 Laravel 服务提供者,用于使用 RabbitMQ

v1.0.0 2021-10-20 21:32 UTC

This package is auto-updated.

Last update: 2024-09-21 12:30:14 UTC


README

该包是为 Laravel 5.7 版本以上开发的

如何安装

选项 1

使用 composer require maksimdimitrov/mdim-amqp-laravel

选项 2

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

"maksimdimitrov/mdim-amqp-laravel": "dev-master"

并在 "repositories" 部分

{ "type": "vcs", "url": "https://github.com/maksimdimitrov/mdim-amqp-laravel.git" }

下一步:运行 composer install

下一步是运行 php artisan vendor:publish --tag=mdim_rabbitmq-config 以发布配置文件 config/mdim_rabbitmq.php。检查可用的命令 mdim_rabbitmq:publish_hellomdim_rabbitmq:start_consumer 'App\SomeConsumers\SomeJob',使用 php artisan

config/mdim_rabbitmq.php 中的配置

您可以有多个连接:默认、some-other-rabbitmq-service 等...

return [
    'connections' => [
        'default' => [
            
            /** optional, it will default to AMQPStreamConnection */
            'connectionClass' => PhpAmqpLib\Connection\AMQPStreamConnection::class,

            'connectionConfig' => [
                [
                    'host' => 'rabbitmq',
                    'port' => '5672',
                    'user' => 'guest',
                    'password' => 'guest',
                ],
            ],

            'connectionOptions' => [],    
        ],
        
        'some-other-rabbitmq-service' => [

            'connectionConfig' => [
                [
                    'host' => 'localhost',
                    'port' => '5672',
                    'user' => 'guest',
                    'password' => 'guest',
                ],
            ],   
        ],
    ],
];

如何使用

您需要创建一个新的作业类,该类将充当消费者,并在收到消息时持有回调函数。该类必须扩展 MdimAMQPLaravel\ReceiveJob 并实现 handle() 函数,该函数是回调函数。您可以使用依赖注入容器注入服务。您还需要定义 getConnectionName()、getQueueName() 和 getConsumerTag(),检查 AMQP 文档中属性描述 https://rabbitmq.cn/amqp-0-9-1-reference.html#basic.consume getConnectionName() 应返回 config/mdim_rabbitmq.php 中连接的名称,例如 default 或 some-other-rabbitmq-service

您可以根据您的消费者需求重写 MdimAMQPLaravel\ReceiveJob 中的所有静态方法。

有两个可运行的示例。检查作业类 MdimAMQPLaravel\Examples\HelloJob,它将在启动后消费消息。您可以使用示例命令类 MdimAMQPLaravel\Examples\HelloCommand 发送消息

使用控制台命令启动此示例 php artisan mdim_rabbitmq:start_consumer 'MdimAMQPLaravel\Examples\HelloJob'

在另一个控制台中运行命令 php artisan mdim_rabbitmq:publish_hello

在第一个控制台中,您应该会看到接收到的消息。

在您编写带有示例名称的作业工作类 SomeNamespace\SomeClass 后,可以使用以下方式启动它

php artisan mdim_rabbitmq:start_consumer 'SomeNamespace\SomeClass'

发布消息可以不使用命令,也可以从控制器中像这样进行


app('mdim_rabbitmq-publisher')
    ->connection('default') // default is the connection name from config file, e.g. default or some-other-rabbitmq-service
    ->queue('some-queue-name', false, true, false, false)
    ->publish('Hello message', ['delivery_mode' => \PhpAmqpLib\Message\AMQPMessage::DELIVERY_MODE_PERSISTENT], '', 'some-queue-name')
    ->close();
            

一个示例消费者类可以是


namespace SomeNamespace;
use MdimAMQPLaravel\ReceiveJob;

class SomeClass extends ReceiveJob
{
    public function handle()
    {
        echo 'message -> ' . $this->msg->body . PHP_EOL;
        $this->msg->delivery_info['channel']->basic_ack($this->msg->delivery_info['delivery_tag']);
    }
    
    public static function getConnectionName()
    {
        return 'default'; // default is the connection name from config file, e.g. default or some-other-rabbitmq-service
    }
    
    public static function getQueueName()
    {
        return 'some-queue-name';
    }
    
    public static function getConsumerTag() 
    {
        return '';
    }
}