entanet/pub-sub-laravel

laravel事件的包装器,允许发布事件而无需使用监听器和订阅命令

v1.0 2018-12-07 10:41 UTC

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-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]);