【发布时间】: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