Spring AbstractPollingMessageListenerContainer线程如何将Active MQ



在我当前的体系结构中,从ActiveMQ队列轮询消息的SpringAbstractPollingMessageListenerContainer线程将消息从队列调度到远程服务器。

现在我的问题是,它如何识别要从队列中发送的消息是否已经由它发送?

假设远程服务器向同一AbstractPollingMessageListenerContainer线程发回响应的速度较慢,因此AbstractPollingMessageListenerContainer线程仍在等待响应,因此无法从队列中删除消息,并且该消息的副本仍在ActiveMQ队列中。

现在假设队列中有100条消息,其中1条消息由于接收速度慢而仍未从队列中删除,99条消息已被删除。现在,另一个保持从ActiveMQ队列池化消息的AbstractPollingMessageListenerContainer线程将发现此消息,并在其中再次调度此消息,或者不会,因为它识别出此消息已经调度了一次。如果它识别为已发送,请解释它是如何识别的?

感谢和问候,

Prakash Chandra

这只是JMS规范的一部分。当消息从队列传递给消费者时,代理不会将其传递给另一个消费者。当消费者确认交付时(通常是在完成处理之后),消息实际上会从代理中删除。

如果原始使用者崩溃,代理会检测到它,并自动将消息重新排队以重新传递。类似地,如果使用者是事务性的并回滚消息,则会重新排队。

阅读JMS规范。

最新更新