homedoctor-es/laravel-eventbridge-sqs-consumer

一个用于从EventBridge事件消费sqs消息的Laravel插件

0.1 2024-07-02 11:27 UTC

This package is auto-updated.

Last update: 2024-10-02 12:07:43 UTC


README

Latest Version on Packagist Software License Total Downloads

我们只需要监听推送到SQS队列的消息并对此做出反应。这里的唯一区别是我们不使用默认的Laravel SQS驱动程序,因为推送的消息并不遵循从Laravel应用程序推送的作业/事件的标准Laravel JSON有效负载。EventBridge和SNS的消息更简单。

先决条件

  1. 安装并配置此软件包
  2. 至少一个SQS队列 - 每个订阅Laravel应用程序一个队列
  3. 至少一个事件桥接事件总线
  4. 在您的EventBus和SQS队列之间设置SQS订阅
  5. 配置相关的访问策略,特别是如果您想直接从AWS控制台发布消息的话。

安装

您可以通过composer在Laravel 8+应用程序上安装此软件包

composer require homedoctor-es/laravel-eventbridge-sqs-consumer

然后,将 HomedoctorEs\EventBridgeSqs\EventBridgeSqsServiceProvider::class 添加到 config/app.php 文件中以自动加载驱动程序。

配置

确保根据需要定义您的 环境变量

# both drivers require:
AWS_DEFAULT_REGION=you-region
AWS_ACCESS_KEY_ID=your-aws-key
AWS_SECRET_ACCESS_KEY=your-aws-secret

安装完软件包后,与标准Laravel SQS队列类似,您需要在 config/queue.php 配置文件中添加以下连接并配置您的凭证。

'connections' => [
    // ...
    'eventbridge-sqs' => [
        'driver' => 'eventbridge-sqs',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'endpoint' => env('AWS_URL'),
        'prefix' => env('EVENTBRIDGE_SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
        'queue' => env('EVENTBRIDGE_SQS_QUEUE', 'app1_queue'),
        'suffix' => env('EVENTBRIDGE_SQS_SUFFIX'),
        'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
    ],
    // ...
],

一旦您的队列配置正确,您将需要能够定义您希望为哪种传入事件使用哪些监听器。为了做到这一点,您需要创建Laravel监听器并通过软件包为您创建的服务提供者关联事件。

注册事件和监听器

您需要一个服务提供者来定义每个订阅事件及其监听器的映射。您可以使用独立的一个,或者您可以将 $listen 属性添加到任何您拥有的提供者中。

listen 属性包含一个包含所有事件(键)及其监听器(值)的数组。与标准的Laravel EventServiceProvider 不同,您可以为每个事件定义一个监听器,但是您可以添加尽可能多的事件到这个数组中,以满足您的应用程序需求。

使用广播名称

您可以通过使用其广播名称来订阅事件,例如,如果您广播了一个名为orders.shipped的事件

use App\Listeners\PubSub\SendShipmentNotification;

/**
 * The event handler mappings for subscribing to PubSub events.
 *
 * @var array
 */
protected $listen = [
    'orders.shipped' => [
        SendShipmentNotification::class,
    ],
];

您可以从通用的 OrdersListener 中做任何事情,甚至可以在您的应用程序内部调度更多事件

定义监听器

在这里,我们简单地重用了标准的Laravel事件监听器。唯一的不同之处在于主要 handle() 方法的函数定义略有不同。我们不是期望传递一个事件类实例,我们只是接收 payload 和(如果找到的话)subject

/**
 * Handle the event.
 *
 * @return void
 */
public function handle(array $payload, string $subject = '')
{
    // ...
}

像处理标准Laravel监听器一样处理这些监听器。

注意:您仍然需要确保您期望的提供者中的映射已配置。

鸣谢

许可

MIT许可证。请参阅许可证文件获取更多信息。