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
Requires
- php: ^8.3
- symfony/event-dispatcher: ^7.2
- symfony/mercure-bundle: ^0.3.7
- ufo-tech/json-rpc-bundle: ^9.1
Requires (Dev)
- phpunit/phpunit: ^11.0
- symfony/framework-bundle: ^7.2
- symfony/http-kernel: ^7.2
Suggests
- symfony/http-client: To publish events asynchronously via Mercure
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