Reputation: 23
I'm new to RabbitMQ and want to implement asynchronous messaging of SAGA with RabbitMQ.So I used RPC example of RabbitMQ to do the task. I've one orchestrator ( RPCClient) and multiple microservices ( RPCServer). Orchestrator uses unique queues to command microservices.And each microservice uses a common queue ( Reply_ Queue) to reply orchestrator. To keep log I want to get notifications in orchestrator side, when any microservice is down for any configurable time. I read about consumer cancellation,but it only works when I delete the queue.How to get notifications in JAVA with keeping queue messages? And is it correct way to implement saga asynchronous messaging?
Upvotes: 2
Views: 2335
Reputation: 1525
To implement a reliable RPC is hard, I can't give a detail guide about how to do this. If we ignore same special failure situation, I can give a simple workaround:
First, we assume that RPCClient
never fail, RPCServer
may fail anytime.
RPCClient
need to know which request is timeout, so it can send request message
with a TTL. After RPCServer
receive request message
and send response message
, it should ACK
the request message
.
If RPCServer
:
request message
ORresponse message
The request message
will be republish to Dead Letter Exchange, so RPCClient
can consume to some queue binded with that exchange, it can know which request is timeout.
Upvotes: 0