请教activemq应用中消息进入DLQ的问题

villagehead 2015-02-10 04:47:16
我有个程序,
要用多个线程(试验用了2个),
从一个队列里按照消息的不同属性(也就是用selector)取出消息进行处理。

可是每次执行程序取消息的时候,
从activemq的控制台里看,都会看到有很多消息进入了DLQ队列。
如下图:

所有理由差不多都是这样的


这样就有很多消息没有被那2个线程取到,
也就“丢”了很多消息

请问是因为我有多个线程从1个队列里取数据导致的消息进入DLQ吗?
还是别的,比如activemq的配置等问题引起的呢?

这是我actvemq.xml里的部分内容


transportConnectors:


2个线程都是从一个ActiveMQConnectionFactory实例里取得的connection对象。

请大神指教啊
谢谢了
...全文
579 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
strivehard 2015-03-03
  • 打赏
  • 举报
回复
qq 7689791
strivehard 2015-03-03
  • 打赏
  • 举报
回复
conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); 改成false true应该是启用事物了。 如果客户端没有确认收到消息 就会重发啊。
villagehead 2015-02-12
  • 打赏
  • 举报
回复
多谢回复。 你说的还有网上说导致死锁的3个原因,貌似我程序里都没有 我生成session用的是这句话: conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); 关闭session也是在发送完以后在调用的session的commit和close方法 总之非常奇怪。 你说的重复发送是amq的配置(activemq.xml)里设置的吗?这个重发有什么意义呢? 发送到amq里不就可以了,为啥还要重发?
villagehead 2015-02-11
  • 打赏
  • 举报
回复
再顶 另外,我放慢了发送端发送频率,就没有消息进入dlq了, 难道是发送端发送过于频繁有关? 我是2台电脑,分别用两个activemq, 用networkConnector打通,然后一个发一个收 发送也是2个线程, 1个5秒发一次,一个7秒发一次,都是向一个队列里发送。 求指教 求顶 求
strivehard 2015-02-11
  • 打赏
  • 举报
回复
看错误信息 是超过了重发送次数 amq有重发送策略的 默认重发送5次 如果你这5次都没应答 则进入死新队列 需要看你客户端怎么写的 是否有事物 是否调用了recover rollback 或者应答模式是否 客户端应答 是否启用了优化应答
villagehead 2015-02-10
  • 打赏
  • 举报
回复
顶下,在线等啊~~

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧