becklyn/eventor-symfony

A minimalistic library for abstracting pub/sub operations (ported for Symfony)

Installs: 1 244

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 3

Forks: 0

Open Issues: 0

Type:symfony-bundle

3.0.0 2022-09-20 08:12 UTC

This package is auto-updated.

Last update: 2024-10-20 12:21:43 UTC


README

🔮 A minimalistic library for abstracting pub/sub operations (ported for Symfony)

→ eventor is clerk for pub/sub 😉

→ the original Go implementation can be found here

Installation

composer require becklyn/eventor-symfony

Supported brokers

eventor has builtin support for the following brokers:

Usage

Being a minimalistic library, eventor only provides you with the basics. The rest is up to your specific need.

Env variables

DAPR_HOST=http://localhost:3500 # Default: (null)
DAPR_PUBSUB=pubsubname # Default: (null)

Publish

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",
        ));
    }
}

Subscribe

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