lostlink/laravel-messenger

此包的最新版本(2.1.3)没有提供许可证信息。

向Ingestor发送消息

2.1.3 2024-09-25 17:44 UTC

This package is auto-updated.

Last update: 2024-09-25 17:45:19 UTC


README

LostLink Laravel-Messenger 是一个Laravel包,用于异步向各种服务发送消息,而不会阻塞您的应用程序的处理。消息会在PHP destruct() 阶段排队并发送,确保应用程序的性能不受外部服务通信的影响。

特性

  • 非阻塞消息发送:消息在PHP请求生命周期之后处理。
  • 可扩展的驱动系统:添加自定义驱动程序以向您选择的服务发送消息。
  • 简单配置:使用环境变量设置不同的驱动程序。
  • 速率限制:控制消息发送速率,避免超过服务限制。

支持的驱动程序

安装

  1. 通过Composer安装此包

    composer require lostlink/laravel-messenger
  2. 发布配置文件(可选)

    php artisan vendor:publish --tag=messenger-config
  3. 配置您要使用的驱动程序的环境变量。

配置

此包支持多个驱动程序,您可以使用环境变量设置默认驱动程序。以下是一个示例配置文件

return [

    'default' => env('LARAVEL_MESSENGER_DRIVER', 'log'),

    'drivers' => [

        'log' => [
            'class' => Lostlink\Messenger\Drivers\Log::class,
            'rate_limit' => [
                'enabled' => env('LARAVEL_MESSENGER_LOG_RATE_LIMIT_ENABLED', false),
                'max_attempts' => env('LARAVEL_MESSENGER_LOG_RATE_LIMIT_MAX_ATTEMPTS', 10),
                'decay_seconds' => env('LARAVEL_MESSENGER_LOG_RATE_LIMIT_DECAY_SECONDS', 60),
            ],
        ],

        'kinesis' => [
            'class' => Lostlink\Messenger\Drivers\Kinesis::class,
            'name' => env('LARAVEL_MESSENGER_KINESIS_STREAM_NAME'),
            'region' => env('LARAVEL_MESSENGER_KINESIS_STREAM_AWS_REGION', env('AWS_DEFAULT_REGION')),
            'aws_key' => env('LARAVEL_MESSENGER_KINESIS_STREAM_AWS_KEY', env('AWS_ACCESS_KEY_ID')),
            'aws_secret_key' => env('LARAVEL_MESSENGER_KINESIS_STREAM_AWS_SECRET_KEY', env('AWS_SECRET_ACCESS_KEY')),
            'rate_limit' => [
                'enabled' => env('LARAVEL_MESSENGER_KINESIS_RATE_LIMIT_ENABLED', false),
                'max_attempts' => env('LARAVEL_MESSENGER_KINESIS_RATE_LIMIT_MAX_ATTEMPTS', 10),
                'decay_seconds' => env('LARAVEL_MESSENGER_KINESIS_RATE_LIMIT_DECAY_SECONDS', 60),
            ],
        ],

        'tinybird' => [
            'class' => Lostlink\Messenger\Drivers\Tinybird::class,
            'name' => env('LARAVEL_MESSENGER_TINYBIRD_DATA_SOURCE_NAME'),
            'token' => env('LARAVEL_MESSENGER_TINYBIRD_TOKEN'),
            'endpoint' => env('LARAVEL_MESSENGER_TINYBIRD_ENDPOINT', 'https://api.us-east.aws.tinybird.co/v0/events'),
            'rate_limit' => [
                'enabled' => env('LARAVEL_MESSENGER_TINYBIRD_RATE_LIMIT_ENABLED', false),
                'max_attempts' => env('LARAVEL_MESSENGER_TINYBIRD_RATE_LIMIT_MAX_ATTEMPTS', 40), // Free tier limit
                'decay_seconds' => env('LARAVEL_MESSENGER_TINYBIRD_RATE_LIMIT_DECAY_SECONDS', 3600), // Free tier limit
            ],
        ],

    ],

];

可用的环境变量

用法

使用 LostLink Laravel-Messenger 发送消息很简单。在配置环境变量后,您可以使用 send 方法

use \Lostlink\Messenger\Messenger;

Messenger::send([
   "timestamp" => "2022-10-27T11:43:02.099Z", 
   "transaction_id" => "8d1e1533-6071-4b10-9cda-b8429c1c7a67", 
   "name" => "Bobby Drake", 
   "email" => "bobby.drake@pressure.io", 
   "age" => 42, 
   "passport_number" => 3847665, 
   "flight_from" => "Barcelona", 
   "flight_to" => "London", 
   "extra_bags" => 1, 
   "flight_class" => "economy", 
   "priority_boarding" => false, 
   "meal_choice" => "vegetarian", 
   "seat_number" => "15D", 
   "airline" => "Red Balloon" 
]);

动态更新配置

您可以通过连接和传递数组给 config([]) 方法来修改特定消息的配置。这允许您覆盖该特定消息的默认驱动设置。以下是一个示例

use \Lostlink\Messenger\Messenger;

Messenger::send([
   "timestamp" => "2022-10-27T11:43:02.099Z", 
   "transaction_id" => "8d1e1533-6071-4b10-9cda-b8429c1c7a67", 
   "name" => "Bobby Drake", 
   "email" => "bobby.drake@pressure.io", 
   "age" => 42, 
   "passport_number" => 3847665, 
   "flight_from" => "Barcelona", 
   "flight_to" => "London", 
   "extra_bags" => 1, 
   "flight_class" => "economy", 
   "priority_boarding" => false, 
   "meal_choice" => "vegetarian", 
   "seat_number" => "15D", 
   "airline" => "Red Balloon" 
])
->driver('tinybird') // Change the driver to "tinybird" for this message
->config([
    'name' => 'example_events', // Change the data source name to "example_events" for this message
    'token' => 'your_token', // Change the token for this message
    'endpoint' => 'https://api.us-east.aws.tinybird.co/v0/events', // Change the endpoint for this message
    'rate_limit' => [
        'enabled' => true, // Enable rate limiting for this message to use Tinybird Free Tier @ 1000/day
        'max_attempts' => 40, // Set the maximum number of attempts before rate limiting is enforced
        'decay_seconds' => 3600, // Set the number of seconds before the rate limit resets
    ],
]);

添加自定义驱动程序

要创建和添加您自己的驱动程序,只需通过实现所需接口扩展驱动系统。

  1. 请确保发布laravel-messenger配置文件

    php artisan vendor:publish --tag=messenger-config
  2. 调整laravel-messenger配置,包括您的自定义驱动程序的名称和类

    return [
         ...   
    
        'drivers' => [
    
             ...
    
            'mycustomdriver' => [
                'class' => \App\Messenger\Drivers\MyCustomDriver::class,
                'name' => env('MY_CUSTOM_DRIVER_NAME'),
                'token' => env('MY_CUSTOM_DRIVER_TOKEN'),
                'endpoint' => env('MY_CUSTOM_DRIVER_ENDPOINT'),
                'rate_limit' => [
                    'enabled' => env('MY_CUSTOM_DRIVER_RATE_LIMIT_ENABLED', false),
                    'max_attempts' => env('MY_CUSTOM_DRIVER_RATE_LIMIT_MAX_ATTEMPTS', 10),
                    'decay_seconds' => env('MY_CUSTOM_DRIVER_RATE_LIMIT_DECAY_SECONDS', 60),
                ],
            ],
    
        ],
    
        ...
    
    ];
  3. 创建一个扩展 \LostLink\Drivers\Driver 的类

    class MyCustomDriver extends Driver
    {
        public function handle(): void
        {
            $response = Http::withToken($this->message->token ?? $this->message->config->get('token'))
                ->acceptJson()
                ->withQueryParameters([
                    'name' => $this->message->stream ?? $this->message->config->get('name'),
                ])
                ->post(
                    $this->message->endpoint ?? $this->message->config->get('endpoint'),
                    $this->message->body
                );
    
            $response->throw();
        }
    }
    ```

许可证

此包是开源软件,许可协议为 MIT许可