【问题标题】:every 15th JMS message stuck in queue till 1st message finishes每 15 条 JMS 消息卡在队列中,直到第 1 条消息完成
【发布时间】:2014-02-27 06:05:12
【问题描述】:

我们面临一个问题,在 MDB 实例没有完成对第一条消息的处理之前,不会从消息队列中读取每 15 条消息。

消息的生存时间为 30 秒。如果第一次消息消费花费的时间比这多得多,那么卡住的消息会在队列中停留超过 30 秒,因此当缓慢的消息消费停止时会超时。

MDB 池大小为 20,但尝试了 30、10、... 没有区别。

场景如下:

#1 SLOW 消息进入队列,调用 MDB onMessage(),消息处理。

#2-14 消息进入队列,调用 MDB onMessage(),处理消息。

#15 消息进入队列,消息未被触及。

#16-29 消息进入队列,MDB onMessage() 被调用,消息被处理。

#30 消息进入队列,消息未被触及。

...每 15 次卡住一次

#1 结束,然后由于消息超时,每 15 条消息(卡住)立即被丢弃。

总是每 15 条消息...

我们正在使用 JBOSS EAP 6.1 并使用 JAVA 7

谁能给我们一些关于这个问题的提示,可能是什么原因,在哪里寻找?必须将某些东西配置为 15 导致此问题,但我们不知道它可能是什么。

提前致谢!

【问题讨论】:

  • 也许这与某些批处理功能有关?
  • 我不知道您的邮件是如何优先级排序的。但是,对于慢速消息,如何将 JMSPriority 设置为低呢?
  • 不幸的是,以这种方式对消息进行优先级排序是行不通的,因为如果 MDB 试图访问的后端存在服务问题,则消息速度很慢。而且我们已经有一个优先策略,目前对所有消息都是平等的。可能是一些批量消耗,但我真的不知道在哪里看
  • 经过更彻底的测试后,我已经编辑了问题
  • 嗨,你能告诉我在哪里可以找到队列中发送的消息吗?如果有的话。谢谢。

标签: java jakarta-ee jms


【解决方案1】:

我已经解决了这个问题。

这是因为hornetq基于窗口的流量控制。

这篇文章包含解决方案: JMS queue with multiple consumers

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 2014-09-29
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2021-06-16
    • 2020-01-20
    • 2015-02-25
    • 2011-01-11
    相关资源
    最近更新 更多