nuwber / rabbitevents
Nuwber RabbitEvents 包
Requires
- php: ^8.1
- ext-json: *
- enqueue/amqp-lib: ^0.10.19
- illuminate/console: 9 - 11
- illuminate/container: 9 - 11
- illuminate/events: 9 - 11
- illuminate/support: 9 - 11
Requires (Dev)
- mockery/mockery: ^1.6.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.5|^11.0
- vlucas/phpdotenv: ^v5.4.1
Suggests
- ext-amqp: Using this extension makes your app faster. If you're using it you need to install enqueue/amqp-ext.
- ext-pcntl: Required to use all features of the worker.
- enqueue/amqp-ext: This package is necessary if you want to use `ext-amqp`.
Replaces
- rabbitevents/foundation: v8.2.1
- rabbitevents/listener: v8.2.1
- rabbitevents/publisher: v8.2.1
- 8.x-dev
- v8.2.1
- v8.2.0
- v8.1.5
- v8.1.4
- v8.1.3
- v8.1.2
- v8.1.1
- v8.1.0
- v8.1.0-beta.1
- v8.0.1
- v8.0.0
- 7.x-dev
- v7.3.0
- v7.2.0
- v7.1.1
- v7.1.0
- v7.0.1
- v7.0
- v7.0-rc.1
- v7.0-beta.4
- v7.0-beta.3
- v7.0-beta.2
- v7.0-beta.1
- 6.x-dev
- v6.1.0
- v6.0.6
- v6.0.5
- v6.0.4
- v6.0.3
- v6.0.2
- v6.0.1
- v6.0
- v6.0.0-RC2
- v6.0.0-RC1
- v5.7
- v5.6
- v5.5
- v5.4
- v5.3
- v5.2
- v5.1
- v5.0
- v5.0-beta.1
- v4.3
- v4.2
- v4.1
- v4.0
- v4.0-beta.2
- 4.0-beta.1
- v3.1
- v3.0
- v3.0-beta2
- v3.0-beta1
- v2.0
- v1.4
- v1.3
- v1.2
- v1.1
- v1.0
- v0.1.6
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
- dev-master
This package is auto-updated.
Last update: 2024-09-23 14:42:13 UTC
README
让我们想象一个用例:一个用户完成了一笔支付。您需要处理这笔支付,注册用户,发送电子邮件,将分析数据发送到您的分析系统等。现代基础设施要求您创建执行特定任务且只执行该任务的微服务:一个处理支付,一个用于用户管理,一个用于邮件系统,一个用于分析。如何让所有这些都知道支付成功并处理此消息?答案是“使用 RabbitEvents”。
再次强调,RabbitEvents 库可以帮助您发布事件并在另一个应用程序中处理它。在同一应用程序中使用它没有意义,因为 Laravel 的事件处理效果更好。
重要
注意版本 7 用户! 已发布新版本 7.3.0,支持 ext-amqp(类似于版本 8.2)。更新以提高性能。
演示
目录
通过 Composer 安装
您可以使用 Composer 将 RabbitEvents 安装到您的 Laravel 项目中
composer require nuwber/rabbitevents
配置
安装 RabbitEvents 后,使用 rabbitevents:install
Artisan 命令发布其配置和 Service Provider
php artisan rabbitevents:install
此命令将在 config/rabbitevents.php
安装配置文件,并在 app/providers/RabbitEventsServiceProvider.php
安装 Service Provider 文件。
配置文件与队列连接非常相似,但具有单独的配置,这样您就不会混淆是否有另一个连接到 RabbitMQ。
<?php use Enqueue\AmqpTools\RabbitMqDlxDelayStrategy; return [ 'default' => env('RABBITEVENTS_CONNECTION', 'rabbitmq'), 'connections' => [ 'rabbitmq' => [ 'driver' => 'rabbitmq', 'exchange' => env('RABBITEVENTS_EXCHANGE', 'events'), 'host' => env('RABBITEVENTS_HOST', 'localhost'), 'port' => env('RABBITEVENTS_PORT', 5672), 'user' => env('RABBITEVENTS_USER', 'guest'), 'pass' => env('RABBITEVENTS_PASSWORD', 'guest'), 'vhost' => env('RABBITEVENTS_VHOST', 'events'), 'delay_strategy' => env('RABBITEVENTS_DELAY_STRATEGY', RabbitMqDlxDelayStrategy::class), 'ssl' => [ 'is_enabled' => env('RABBITEVENTS_SSL_ENABLED', false), 'verify_peer' => env('RABBITEVENTS_SSL_VERIFY_PEER', true), 'cafile' => env('RABBITEVENTS_SSL_CAFILE'), 'local_cert' => env('RABBITEVENTS_SSL_LOCAL_CERT'), 'local_key' => env('RABBITEVENTS_SSL_LOCAL_KEY'), 'passphrase' => env('RABBITEVENTS_SSL_PASSPHRASE', ''), ], 'read_timeout' => env('RABBITEVENTS_READ_TIMEOUT', 3.), 'write_timeout' => env('RABBITEVENTS_WRITE_TIMEOUT', 3.), 'connection_timeout' => env('RABBITEVENTS_CONNECTION_TIMEOUT', 3.), 'heartbeat' => env('RABBITEVENTS_HEARTBEAT', 0), 'persisted' => env('RABBITEVENTS_PERSISTED', false), 'lazy' => env('RABBITEVENTS_LAZY', true), 'qos' => [ 'global' => env('RABBITEVENTS_QOS_GLOBAL', false), 'prefetch_size' => env('RABBITEVENTS_QOS_PREFETCH_SIZE', 0), 'prefetch_count' => env('RABBITEVENTS_QOS_PREFETCH_COUNT', 1), ] ], ], 'logging' => [ 'enabled' => env('RABBITEVENTS_LOG_ENABLED', false), 'level' => env('RABBITEVENTS_LOG_LEVEL', 'info'), 'channel' => env('RABBITEVENTS_LOG_CHANNEL'), ], ];
从 7.x 升级到 8.x
PHP 8.1 需要
RabbitEvents 现在需要 PHP 8.1 或更高版本。
支持的 Laravel 版本
RabbitEvents 现在支持 Laravel 9.0 或更高版本。
从 rabbitevents:listen
命令中删除了 --connection
选项
存在一个需要解决的问题 #98。默认连接总是被使用。
RabbitEvents 发布者
RabbitEvents 发布者组件提供了一种在应用程序结构中发布事件的 API。有关其工作方式的更多信息,请参阅 RabbitEvents 发布者页面。
RabbitEvents 监听器
RabbitEvents 监听器组件提供了一种在应用程序结构中处理发布的事件的 API。有关其工作方式的更多信息,请参阅 RabbitEvents 监听器页面。
加速 RabbitEvents
为了提高 RabbitEvents 的性能,考虑安装 php-amqp
扩展以及 enqueue/amqp-ext
包。通过这样做,RabbitEvents 将利用 enqueue/amqp-ext
包而不是默认的 enqueue/amqp-lib
包。这种替换的好处是,用 C 编写的 php-amqp
包在性能上显著优于用 PHP 编写的 enqueue/amqp-lib
包。
您可以使用以下命令安装 php-amqp
扩展:
pecl install amqp
或者使用您喜欢的任何方式。更多相关信息,请参阅这里。
接下来,使用以下命令安装enqueue/amqp-ext
包
composer require enqueue/amqp-ext
不需要额外的配置。
非标准使用
如果您只使用RabbitEvents的一部分,您应该了解以下几点
-
记住,我们正在使用RabbitMQ作为传输层。在RabbitMQ文档中,您可以找到使用路由键发布消息的示例。这个路由键是事件名称,例如上面示例中的
something.happened
。 -
RabbitEvents期望消息体是一个JSON编码的数组。数组的每个元素都将作为单独的变量传递给Listener。例如
[ { "key": "value" }, "string", 123 ]
这个数组中有3个元素,所以将会有3个变量传递给Listener(一个数组、一个字符串和一个整数)。如果传递的是一个关联数组,Dispatcher会自己包装这个数组。
许可证
RabbitEvents是一个开源软件,许可协议为MIT许可。