ufo-tech/rpc-mercure-transport

Mercure transport layer for JSON-RPC event broadcasting between services.

Installs: 2

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

Type:component

pkg:composer/ufo-tech/rpc-mercure-transport

1.0.0 2025-11-18 12:19 UTC

This package is auto-updated.

Last update: 2025-11-18 12:20:49 UTC


README

Mercure Transport Layer for JSON-RPC Додає підтримку кросдоменних подій між сервісами через Mercure Hub.

🧬 Ідея

rpc-mercure-transport — це розширення для rpc-bundle, яке дозволяє публікувати події з RPC-сервера у Mercure Hub і отримувати їх іншими сервісами, що підписані на відповідні topics.

Це дає можливість побудови асинхронної подієвої взаємодії між мікросервісами, без потреби в RabbitMQ чи інших брокерах.

⚙️ Встановлення

composer require ufo-tech/rpc-mercure-transport

🔧 Конфігурація

config/packages/rpc_mercure_transport.yaml:

rpc_mercure_transport:
  hub_url: '%env(MERCURE_PUBLISH_URL)%'
  jwt_provider: 'App\Security\MercureJwtProvider'
  topics_prefix: 'rpc.events.'

🚀 Використання

Коли у RPC-сервісі dsl,e подія (через EventDispatcher), транспорт автоматично публікує її у Mercure Hub:

$this->dispatcher->dispatch(new ProductCreatedEvent($productId));

→ на боці Mercure ця подія піде в topic rpc.events.product.created.

інші сервіси, що підписані на цей topic, миттєво отримають повідомлення через SSE.

📡 Приклад підписки

const url = new URL('https://mercure.example.com/.well-known/mercure');
url.searchParams.append('topic', 'rpc.events.product.*');

const eventSource = new EventSource(url, { withCredentials: true });

eventSource.onmessage = e => {
    const event = JSON.parse(e.data);
    console.log('Event received:', event);
};

🧠 Основна ідея

  • кожен RPC-сервіс має власні події (domain events)
  • rpc-mercure-transport транслює їх у Mercure Hub
  • інші сервіси можуть реагувати на них без прямої залежності

Синхронні виклики → через RPC Асинхронні нотифікації → через Mercure

🦠 Ліцензія

MIT © UFO-Tech