I am using Spring AMQP with asynchronous messaging. My model assumes that there are two applications A and B, both producers and consumers.
I am using @RabbitListener
on class level and @RabbitHandler
on method level, for message consuming. Everything works nice and design is clean, I like Spring's solution.
My problem is - I have no idea how to detect, and how to act, when A is expecting to receive progress message from B (any message) and it's not coming in. Is there any timeout for such cases? If so, how to implement callback method?
I found some timeout settings, but they usually works for connection itself, or only when using RPC pattern (one request one response).
Desired solution is - A should receive progress message every minute. If no progress message is consumed for, say, 3 minutes, I want to cancel the job.
When using async consumers, there's no mechanism to generate an event if a message is not received within some time period.
You can schedule your own task though and cancel/reschedule the task when a message arrives.
Use a TaskScheduler
with
future = schedule(myRunnable, new Date(System.currentTimeMillis() + 180000));
use future.cancel()
when a message arrives.