jobilla / laravel-app-events
使用 Google Cloud PubSub 管理SOA的全局事件
v1.8.0
2024-06-24 12:21 UTC
Requires
- php: >= 7.3
- ext-json: *
- google/cloud: 0.*
- google/protobuf: ^3.6.0
- illuminate/bus: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/config: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/console: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- kainxspirits/laravel-pubsub-queue: ~0.4.0|~0.5.0|~0.6.0|~0.7.0|~0.8.0|~0.9.0
Requires (Dev)
- mockery/mockery: ^1.2
- phpunit/phpunit: ^8.2
- dev-master
- v1.8.0
- v1.7.0
- v1.6.0
- v1.5.5
- v1.5.4
- v1.5.3
- v1.5.2
- v1.5.1
- v1.5.0
- v1.4.0
- v1.3.0
- v1.2.2
- v1.2.2-rc2
- v1.2.2-rc
- v1.2.1
- v1.2.0
- v1.1.0
- v1.0.1
- v1.0.0
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.0
- v0.2.2
- v0.2.1
- v0.2
- v0.1
- dev-chore/increase-message-size-limit
- dev-dont-ack-messages-with-unregistered-protos
- dev-feat/disabling
This package is auto-updated.
Last update: 2024-09-24 12:51:45 UTC
README
安装
使用Composer通过 composer require decahedron/laravel-app-events
安装
使用方法
此包中实现的App Event只是一个常规的Laravel工作类,它可以通过dispatch
方法正常分发。
分发(广播)事件
当你分发一个应用事件时,你必须提供一个事件名称,以及一个形式为protobuf消息的有效负载。
dispatch(new AppEvent('user.created', new User(['name' => $user->name])));
为了正确编码,你还需要提供一个从名称到类实现的映射。这允许包以不限于PHP的方式编码消息,从而允许将消息解码为protobuf支持的任何语言的结构。
广播配置
return [ 'enabled' => true, 'project_id' => 'your-google-project', 'topic' => 'app-events', 'subscription' => 'login-handler' 'mappings' => [ 'User' => App\Proto\User::class, ], ];
处理事件
任何能够与Google Cloud PubSub通信的应用程序都可以处理事件,并且是用可以使用protobuf的语言编写的。
为了使用此包处理事件,你的处理应用程序(可能和分发者相同)必须包含以下配置。
return [ 'enabled' => true, 'project_id' => 'your-google-project', 'topic' => 'app-events', 'subscription' => 'user-registrator', 'mappings' => [ 'User' => App\Proto\User::class, ], 'handlers' => [ 'user.created' => App\Auth\RegisterUser::class, ], ];
这里指定的处理程序必须是一个具有handle
方法的类,它接受protobuf消息作为参数。这个类通过Laravel容器解析,因此你可以使用构造函数注入。
class RegisterUser { protected $registrator; public function __construct(Registrator $registrator) { $this->registrator = $registrator; } public function handle(User $user) { $this->registrator->register( $user->getName(), $user->getEmail(), ); } }
请注意,mappings
仍然在这里需要,以便将数据转换回正确的protobuf消息。因此,将你的基础配置(不包括订阅名称和处理程序)放置在共享位置可能是有益的,这样就可以一次性更新所有位置。