becklyn / eventor-symfony
一个用于抽象发布/订阅操作的最简库(为 Symfony 适配)
3.0.0
2022-09-20 08:12 UTC
Requires
- php: >=8.1
- cloudevents/sdk-php: ^1.0
- guzzlehttp/psr7: ^2.4
- illuminate/collections: ^8.12 | ^9.25
- open-telemetry/opentelemetry: ^0.0.15
- psr/http-client: ^1.0
- symfony/config: 6.1.*
- symfony/dependency-injection: 6.1.*
- symfony/framework-bundle: ^6.1
- symfony/http-client: 6.1.*
- symfony/http-foundation: 6.1.*
- symfony/http-kernel: 6.1.*
- symfony/serializer: 6.1.*
Requires (Dev)
README
🔮 一个用于抽象发布/订阅操作的最简库(为 Symfony 适配)
→ eventor 是 clerk 的发布/订阅组件 😉
→ 原始的 Go 实现可以在 这里 找到
安装
composer require becklyn/eventor-symfony
支持的代理
eventor 内置了对以下代理的支持
- Dapr Pub/sub API - 用于构建可移植和可靠的微服务的 API
使用方法
作为一个最简库,eventor 只提供了基础功能。其他功能取决于您的具体需求。
环境变量
DAPR_HOST=http://localhost:3500 # Default: (null) DAPR_PUBSUB=pubsubname # Default: (null)
发布
class Message { public function __construct( private readonly string $id, private readonly string $body, ) {} public function id(): string { return $this->id; } public function body(): string { return $this->body; } }
class PublishExample { public function __construct( private readonly Publisher $publisher, ) { $this->publisher->publish("topic", new Message( id: "0", body: "Hello World", )); } }
订阅
class DaprSubscriptionController extends AbstractController { public function __construct( private readonly DaprSubscriptionRegistry $subscriptionRegistry, ) { new On( fn (Message $msg) => echo($msg), $this->$subscriber, "topic", ); } #[Route('/dapr/subscribe', methods: [Request::METHOD_GET])] public function handleSubscribe() : Response { return $this->subscriptionRegistry->handleSubscribe(); } #[Route('/dapr/pubsubname/topic', methods: [Request::METHOD_POST])] public function handleTopic(Request $request): Response { return $this->subscriptionRegistry->handleTopic($request); } }