【问题标题】:How Spring AbstractPollingMessageListenerContainer threads recognises messages in Active MQ queue as not duplicateSpring Abstract Polling MessageListenerContainer 线程如何将 Activemq 队列中的消息识别为不重复的
【发布时间】:2016-05-21 07:55:57
【问题描述】:

在我当前的架构中,从 ActiveMQ 队列轮询消息的 Spring AbstractPollingMessageListenerContainer 线程将消息从队列分派到远程服务器。

现在我的问题是它如何识别它将从队列中分派的消息是否已经被它分派?

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

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

感谢和问候,

普拉卡什·钱德拉

【问题讨论】:

    标签: spring activemq spring-jms


    【解决方案1】:

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

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

    阅读 JMS 规范。

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 2017-02-23
      • 1970-01-01
      • 2010-12-24
      • 2018-11-30
      • 2018-12-22
      • 1970-01-01
      • 2016-05-14
      • 2013-01-22
      相关资源
      最近更新 更多