Spring AbstractPollingMessageListenerContainer线程如何将Active MQ队列中的消息识别为不重复

时间:2016-05-20 18:46:54

标签: spring activemq spring-jms

在我目前的架构中,Spring AbstractPollingMessageListenerContainer 线程轮询来自ActiveMQ队列的消息,将消息从队列调度到远程服务器。

现在我的问题是它如何识别它将从队列发送的消息是否已经被调度?

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

现在假设队列中存在100条消息,由于接收器速度慢,并且已经删除了99条消息,因此仍未从队列中删除1条消息。现在另一个AbstractMollingMessageListenerContainer线程保持从ActiveMQ队列汇集消息将发现此消息,并且它将再次发送此消息,否则它将不会发送此消息,因为它识别此消息已被分派一次。 如果它认为它已经发送,那么请解释它是如何识别的?

谢谢和问候,

Prakash Chandra

1 个答案:

答案 0 :(得分:1)

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

如果原始使用者崩溃,代理会检测到它并自动重新排队邮件以便重新传递。同样,如果消费者是事务性的并回滚消息,则会重新排队。

阅读JMS规范。