我正在使用Spring AMQP进行异步消息传递。我的模型假定有两个应用程序A和B,都是生产者和消费者。Spring AMQP对消息超时采取行动
- A向B发送工作请求并开始监听。
- B正在监听作业请求,并且当作业完成时,启动作业并定期向A发送进度消息。
- B在作业完成后向作业完成消息发送作业完成消息。
- A消耗进度消息,直到工作完成消息到来,然后A存在。
我在课程级别上使用@RabbitListener
,在方法级别上使用@RabbitHandler
来消费消息。一切都很好,设计很干净,我喜欢Spring的解决方案。
我的问题是 - 我不知道如何检测,以及如何采取行动,当A期望从B(任何消息)接收进度信息,并且它不进来。这种情况是否有超时?如果是这样,如何实现回调方法?
我发现了一些超时设置,但它们通常适用于连接本身,或者仅在使用RPC模式时(一个请求一个响应)。
期望的解决方案是 - A应该每分钟收到进度消息。如果没有消耗进度信息,例如3分钟,我想取消该作业。
太糟糕了,因为目前的解决方案非常干净......未来有可能要求和实施此功能吗?毕竟,本地rabbitmq客户端允许超时接收。对于Spring而言,它可能只是一个介绍事件的问题。 – waste
这实际上是相当微不足道的实施(这不是第一次被要求);加上它可以避免任何竞争条件,因为可以在同一个监听器线程上发布“no message”事件。随意打开一个新功能[JIRA问题](https://jira.spring.io/browse/AMQP)。与此同时,您可以将'rabbitTemplate.receiveAndConvert()'与[配置为接收超时的模板]一起使用(http://docs.spring.io/spring- AMQP //参考/ HTML/_introduction.html#_blocking_receive_methods)。 –
所以我做了,谢谢。 – waste