Spring AMQP 对消息超时采取行动

Spring AMQP take action on message timeout

我正在使用 Spring 带有异步消息传递的 AMQP。我的模型假设有两个应用程序 A 和 B,既是生产者又是消费者。

我在 class 级别上使用 @RabbitListener,在方法级别上使用 @RabbitHandler,用于消息消费。一切都很好,设计也很干净,我喜欢 Spring 的解决方案。

我的问题是 - 当 A 期望从 B 收到进度消息(任何消息)但没有收到时,我不知道如何检测和采取行动。这种情况是否有超时?如果可以,回调方法如何实现?

我发现了一些超时设置,但它们通常适用于连接本身,或者仅在使用 RPC 模式(一请求一响应)时有效。

所需的解决方案是 - A 应该每分钟收到一次进度消息。如果 3 分钟内没有消耗进度消息,我想取消作业。

使用异步消费者时,如果在一段时间内未收到消息,则没有生成事件的机制。

您可以安排自己的任务,cancel/reschedule 收到消息时执行任务。

使用 TaskScheduler

future = schedule(myRunnable, new Date(System.currentTimeMillis() + 180000));

当消息到达时使用 future.cancel()