letsgoi / laravel-domain-events-messaging
用于发布/消费 Laravel 应用程序中的域事件消息的软件包
Requires
- php: ^8.3
- ext-json: *
- aws/aws-sdk-php: ^3.134
- illuminate/console: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- letsgoi/php-code-style: ^1.3
- orchestra/testbench: ^9.1
- phpunit/phpunit: ^11.2
This package is auto-updated.
Last update: 2024-09-10 10:57:34 UTC
README
此软件包允许从您的 Laravel 应用程序发送/消费域消息事件。这可以用于在服务之间或在同一应用程序中通过队列进行通信。
它分为两个主要元素
- 发布者:在队列中发布消息。
- 消费者:从队列读取消息并执行作业/事件。
需求
- PHP >= 8.3
- Laravel >= 10.0
安装
- 需要使用 composer 安装软件包
composer require letsgoi/laravel-domain-events-messaging
- 发布配置
php artisan vendor:publish --provider="Letsgoi\DomainEventsMessaging\DomainEventsMessagingServiceProvider" --tag="config"
服务提供者将被自动注册,但如果您想手动添加,您必须将此添加到您的 config/app.php
文件中
'providers' => [ // ... Letsgoi\DomainEventsMessaging\DomainEventsMessagingServiceProvider::class, ];
用法
发布者
域事件消息发布者会将消息发布到在配置文件中定义的交换机(在 DOMAIN_EVENTS_PUBLISHER_CONNECTION
环境变量中)。
发布消息
只需使用 DomainEventsMessagingPublisher
门面上的 publish
方法发送具有事件类型的消息即可
DomainEventsMessagingPublisher::publish('message.subject', 'message content');
消费者
域事件消息消费者将从在配置文件中定义的队列驱动程序(在 DOMAIN_EVENTS_CONSUMER_CONNECTION
环境变量中)读取消息,并按消息主题启动在配置文件(config/domain_events_messaging.php
)中设置的作业/事件。
定义事件
在配置文件中,您必须设置要消费的消息以及当此消息被消费时要分发的作业/事件。
'consumer' => [ // ... 'events' => [ 'message.subject' => Event::class, 'message.other' => Job::class, // ... ] ]
当消费者读取此配置中定义的主题的一些消息时,作业/事件将使用在其构造函数中设置的 array $payload
启动。
作业/事件
在配置文件中定义的用于在消息上分发的类可以是
- Laravel 作业:它必须使用
Illuminate\Foundation\Bus\Dispatchable
特性。 - Laravel 事件:它必须使用
Illuminate\Foundation\Events\Dispatchable
特性。
两者都将在其构造函数中接收作为字符串的消息。
public function __construct(string $message)
您可以将作业排队为 Laravel 中的常规作业。
运行消费者
要作为守护进程运行消费者,您必须执行
php artisan domain-events:consume
此任务应通过类似于 supervisor 的工具进行监控,以便在失败时继续运行。
驱动程序
AWS SNS-SQS
要使用 AWS SNS 或 AWS SQS 驱动程序,您必须遵循这些说明
- 在您的 .env 文件中添加(并填写)以下变量
# AWS IAM
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
# SNS
AWS_DOMAIN_EVENTS_SNS_TOPIC_ARN=
# SQS
AWS_SQS_DOMAIN_EVENTS_URL=
测试
运行测试
composer test
贡献
欢迎拉取请求。对于主要更改,请首先打开一个问题以讨论您想更改的内容。
请确保根据需要更新测试。