hyperlab / laravel-pubsub-rabbitmq
使用 RabbitMQ 在 Laravel 中实现 Pub/Sub 消息的一种有见地的方法。
1.1.0
2021-06-15 13:50 UTC
Requires
- php: ^8.0
- adbario/php-dot-notation: ^2.2
- illuminate/contracts: ^8.0
- spatie/laravel-package-tools: ^1.4.3
- vladimir-yuldashev/laravel-queue-rabbitmq: ^11.2
Requires (Dev)
- brianium/paratest: ^6.2
- nunomaduro/collision: ^5.3
- orchestra/testbench: ^6.15
- phpunit/phpunit: ^9.3
- spatie/laravel-ray: ^1.9
- vimeo/psalm: ^4.4
README
本包提供了一种有见地的使用 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'], ];
该文件返回一个关联数组,其中
- 键 表示应用程序希望接收的消息类型
- 值 表示处理此类传入消息的应用程序中的类
订阅的处理程序可以通过两种方式定义
-
通过引用类
'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 { // } }
-
通过引用类和方法
'user.created' => [HandleUserCreatedMessage::class, 'handle'],
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的更多信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请查看 我们的安全策略 了解如何报告安全漏洞。
鸣谢
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。