hyperlab / laravel-pubsub-rabbitmq

使用 RabbitMQ 在 Laravel 中实现 Pub/Sub 消息的一种有见地的方法。

1.1.0 2021-06-15 13:50 UTC

This package is auto-updated.

Last update: 2024-09-15 21:30:28 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

本包提供了一种有见地的使用 RabbitMQ 在 Laravel 中实现 Pub/Sub 消息的方法。

安装

通过 composer 安装包

composer require hyperlab/laravel-pubsub-rabbitmq

发布 config/pubsub.php 配置文件

php artisan vendor:publish --provider="Hyperlab\LaravelPubSubRabbitMQ\PubSubServiceProvider" --tag="pubsub-rabbitmq-config"

发布 routes/subscriptions.php 路由文件

php artisan vendor:publish --provider="Hyperlab\LaravelPubSubRabbitMQ\PubSubServiceProvider" --tag="pubsub-rabbitmq-subscriptions"

将以下片段添加到您的应用程序的 config/queue.php 文件中。

<?php

return [

    // ...

    'connections' => [

        // ...
        
        'pubsub' => [
            'driver' => 'pubsub',
            'hosts' => [
                [
                    'host' => env('RABBITMQ_HOST', '127.0.0.1'),
                    'port' => env('RABBITMQ_PORT', 5672),
                    'user' => env('RABBITMQ_USER', 'guest'),
                    'password' => env('RABBITMQ_PASSWORD', 'guest'),
                    'vhost' => env('RABBITMQ_VHOST', '/'),
                ],
            ],
            'options' => [
                'ssl_options' => [
                    'cafile' => env('RABBITMQ_SSL_CAFILE'),
                    'local_cert' => env('RABBITMQ_SSL_LOCALCERT'),
                    'local_key' => env('RABBITMQ_SSL_LOCALKEY'),
                    'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true),
                    'passphrase' => env('RABBITMQ_SSL_PASSPHRASE'),
                ],
            ],
        ],

    ],
    
    // ...
    
];

有关队列连接配置选项的更多详细信息,请参阅 vyuldashev/laravel-queue-rabbitmq 包的说明。

配置

您可以通过 config/pubsub.php 配置文件配置包以满足您的需求。默认情况下,该文件如下所示

<?php

return [

    'rabbitmq' => [

        /*
         * The name of the RabbitMQ exchange on which the outgoing messages are published.
         */
        'exchange' => env('PUBSUB_RABBITMQ_EXCHANGE'),

        /*
         * The name of the RabbitMQ queue from which the incoming messages are consumed.
         */
        'queue' => env('PUBSUB_RABBITMQ_QUEUE'),

    ],

    'queue' => [

        /*
         * The queue connection that is used to communicate with RabbitMQ.
         */
        'connection' => env('PUBSUB_QUEUE_CONNECTION', 'pubsub'),
        
        /*
         * The queue worker that you want to consume your incoming messages with.
         *
         * Valid options are: default, horizon
         */
        'worker' => env('PUBSUB_QUEUE_WORKER', 'default'),

    ],

    /*
     * The file within your code base that contains the message subscriptions of your application.
     */
    'subscriptions' => base_path('routes/subscriptions.php'),

];

订阅者

为了使您的应用程序能够从 RabbitMQ 接收消息,它需要订阅一个或多个消息类型。

默认情况下,这些订阅可以在 routes/subscriptions.php 文件中定义。但是,可以在 配置文件 中更改此文件的路径。

订阅文件的应如下所示

<?php

return [

    'user.created' => HandleUserCreatedMessage::class,

    'user.deleted' => [HandleUserDeletedMessage::class, 'handle'],

];

该文件返回一个关联数组,其中

  • 表示应用程序希望接收的消息类型
  • 表示处理此类传入消息的应用程序中的类

订阅的处理程序可以通过两种方式定义

  1. 通过引用类

    'user.created' => HandleUserCreatedMessage::class,

    在这种情况下,包会在类中查找一个公共方法,该方法接受 Hyperlab\LaravelPubSubRabbitMQ\Subscriber\Message 作为参数。此方法可以命名为任何名称,如下所示

    class HandleUserCreatedMessage
    {
        public function __invoke(\Hyperlab\LaravelPubSubRabbitMQ\Subscriber\Message $message): void
        {
            //
        }
    }
    
    class HandleUserCreatedMessage
    {
        public function handle(\Hyperlab\LaravelPubSubRabbitMQ\Subscriber\Message $message): void
        {
            //
        }
    }
    
    class HandleUserCreatedMessage
    {
        public function execute(\Hyperlab\LaravelPubSubRabbitMQ\Subscriber\Message $message): void
        {
            //
        }
    }
  2. 通过引用类和方法

    'user.created' => [HandleUserCreatedMessage::class, 'handle'],

测试

composer test

变更日志

请参阅 CHANGELOG 了解最近更改的更多信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全漏洞

请查看 我们的安全策略 了解如何报告安全漏洞。

鸣谢

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件