entanet / pub-sub-laravel
laravel事件的包装器,允许发布事件而无需使用监听器和订阅命令
Requires
- php: >=7.2.0
- illuminate/support: ^5.6
- superbalist/laravel-pubsub: ^3.0
- superbalist/php-pubsub-kafka: ^2.0
This package is auto-updated.
Last update: 2024-09-15 03:08:38 UTC
README
Pub-sub-laravel简化了Laravel中pub-sub模式的用法。它基于superbalist/laravel-pubsub。
发布到主题概述
Pub-sub-laravel允许您通过事件发布消息到外部队列,而无需添加监听器来发布消息。它通过别名/外观或对Laravel全局帮助器进行一些修改使用PubSubEvent。
订阅主题概述
您可以使用PubSub2ListenerCommand订阅队列,这样就不需要创建事件来触发目标监听器。
先决条件
- Laravel 5.6+
- superbalist/laravel-pubsub 3.0+
请确保您已将laravel-pubsub服务提供者在config/app.php中包含
'providers' => [
...
Superbalist\LaravelPubSub\PubSubServiceProvider::class,
...
安装和设置
在您的Laravel项目中运行以下命令来安装库
composer require entanet/pub-sub-laravel
注册服务提供者
要将PubSubEventProvider和PubSub2ListenerProvider注册到服务提供者数组中,请在Laravel的config/app.php中将以下行添加到提供者数组中
'providers' => [
...
\Entanet\PubSubLaravel\PubSubEventServiceProvider::class,
\Entanet\PubSubLaravel\PubSub2ListenerProvider::class
...
为PubSubEventFacade添加别名
要为外观添加别名,请将以下内容添加到Laravel的config/app.php中的别名数组中
'aliases' => [
...
'PubSubEvent' => \Entanet\PubSubLaravel\PubSubEventFacade::class,
...
此外,您还可以更改当前事件别名,以便任何当前事件调用都使用PubSubEvent
更改
'aliases' => [
...
'Event' => Illuminate\Support\Facades\Event::class,
...
到
'aliases' => [
...
'Event' => \Entanet\PubSubLaravel\PubSubEventFacade::class,
...
覆盖Laravel全局帮助器事件
Laravel附带一个全局帮助器event,它调度给定的事件,这样您就不需要使用外观。如果您想用PubSubEvent覆盖该帮助器,您需要在vendor/autoload.php之前require PubSubEventHelper.php文件。以下是一个示例,修改Laravel 5.6中的public/index.php文件
// PubSubEventHelper.php is used to override the laravel global event helper.
require __DIR__.'/../vendor/entanet/pub-sub-laravel/src/PubSubEventHelper.php';
require __DIR__.'/../vendor/autoload.php';
为PubSub2ListenerCommand设置此主题的监听器
对于您要消费的每个主题,在Providers/EventServiceProvider.php中添加一个映射
protected $listen = [
...
'test_topic' => [
TestListener::class
]
...
]
使用pub-sub-laravel
通过别名/外观使用PubSubEvent
从外观调用dispatch并供应包含事件数据和主题(new \App\Events\PubEvent($data, 'topic_name')的相关事件)
PubSubEvent::dispatch(new \App\Events\PubEvent($data), 'topic_name');
或者如果您已更改了现有的事件别名
Event::dispatch(new \App\Events\PubEvent($data), 'topic_name');
通过事件全局帮助器使用PubSubEvent
如果您覆盖了全局帮助器
event(new \App\Events\PubEvent($data), 'topic_name');
使用PubSub2ListenerCommand监听主题
运行以下Artisan命令,后跟主题名称,在此示例中主题为test_topic
php artisan pubsub:consumer test_topic
使用PubSubTest
PubSubTest为您设置了一个PubSubInterface的模拟,您可以在单元测试中使用它,并且还包括一个便捷的invokeMethod,可以用来测试受保护的/private函数。所以如果您有一个在TricksyClass中的privateMethod方法,您会这样做
$tricksyInstance = new TricksyClass();
$response = $this->invokeMethod($tricksyInstance, 'privateMethod');
如果它需要两个变量$var1和$var2
$var1 = 5;
$var2 = 'Impossible!';
$tricksyInstance = new TricksyClass();
$response = $this->invokeMethod($tricksyInstance, 'privateMethod', [$var1, $var2]);