Spring AMQP 对消息超时采取行动
Spring AMQP take action on message timeout
我正在使用 Spring 带有异步消息传递的 AMQP。我的模型假设有两个应用程序 A 和 B,既是生产者又是消费者。
- A 向 B 发送作业请求并开始侦听。
- B 正在侦听工作请求,当它到来时,开始工作并定期向 A 发送进度消息。
- B 在作业完成后向 A 发送作业完成消息。
- A 消耗进度消息,直到作业完成消息到来,然后 A 存在。
我在 class 级别上使用 @RabbitListener
,在方法级别上使用 @RabbitHandler
,用于消息消费。一切都很好,设计也很干净,我喜欢 Spring 的解决方案。
我的问题是 - 当 A 期望从 B 收到进度消息(任何消息)但没有收到时,我不知道如何检测和采取行动。这种情况是否有超时?如果可以,回调方法如何实现?
我发现了一些超时设置,但它们通常适用于连接本身,或者仅在使用 RPC 模式(一请求一响应)时有效。
所需的解决方案是 - A 应该每分钟收到一次进度消息。如果 3 分钟内没有消耗进度消息,我想取消作业。
使用异步消费者时,如果在一段时间内未收到消息,则没有生成事件的机制。
您可以安排自己的任务,cancel/reschedule 收到消息时执行任务。
使用 TaskScheduler
和
future = schedule(myRunnable, new Date(System.currentTimeMillis() + 180000));
当消息到达时使用 future.cancel()
。
我正在使用 Spring 带有异步消息传递的 AMQP。我的模型假设有两个应用程序 A 和 B,既是生产者又是消费者。
- A 向 B 发送作业请求并开始侦听。
- B 正在侦听工作请求,当它到来时,开始工作并定期向 A 发送进度消息。
- B 在作业完成后向 A 发送作业完成消息。
- A 消耗进度消息,直到作业完成消息到来,然后 A 存在。
我在 class 级别上使用 @RabbitListener
,在方法级别上使用 @RabbitHandler
,用于消息消费。一切都很好,设计也很干净,我喜欢 Spring 的解决方案。
我的问题是 - 当 A 期望从 B 收到进度消息(任何消息)但没有收到时,我不知道如何检测和采取行动。这种情况是否有超时?如果可以,回调方法如何实现?
我发现了一些超时设置,但它们通常适用于连接本身,或者仅在使用 RPC 模式(一请求一响应)时有效。
所需的解决方案是 - A 应该每分钟收到一次进度消息。如果 3 分钟内没有消耗进度消息,我想取消作业。
使用异步消费者时,如果在一段时间内未收到消息,则没有生成事件的机制。
您可以安排自己的任务,cancel/reschedule 收到消息时执行任务。
使用 TaskScheduler
和
future = schedule(myRunnable, new Date(System.currentTimeMillis() + 180000));
当消息到达时使用 future.cancel()
。