letsgoi/laravel-domain-events-messaging

用于发布/消费 Laravel 应用程序中的域事件消息的软件包

3.0.0 2024-07-10 10:34 UTC

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

贡献

欢迎拉取请求。对于主要更改,请首先打开一个问题以讨论您想更改的内容。

请确保根据需要更新测试。

许可

MIT