activeMQ消费了,待消费消息数没变

背景

activeMQ
java 端写了发送和消费消息的DEMO。但是消费程序运行结束,控制台里的‘Number Of Pending Messages ’和‘Messages Enqueued ’ 没变,依然是1.
如下图:
在这里插入图片描述

原因

原因是消费端创建Session方法createSession的第一个参数transacted传来’TRUE’,传’FALSE’就可以了。
原来有问题的创建Session的代码:

Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);

方法定义:

Session createSession(boolean transacted, int acknowledgeMode)

参数解释:

transacted – indicates whether the session is transacted
acknowledgeMode – indicates whether the consumer or the client will acknowledge any messages it receives; ignored if the session is transacted. Legal values are Session.AUTO_ACKNOWLEDGE, Session.CLIENT_ACKNOWLEDGE, and Session.DUPS_OK_ACKNOWLEDGE.

解释一下:

  • 第一个参数:是否支持事务,如果为true,则会忽略第二个参数,被jms服务器设置为SESSION_TRANSACTED
  • 第二个参数为false时,paramB的值可为Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE其中一个。
  • Session.AUTO_ACKNOWLEDGE为自动确认,客户端发送和接收消息不需要做额外的工作。哪怕是接收端发生异常,也会被当作正常发送成功。
  • Session.CLIENT_ACKNOWLEDGE为客户端确认。客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。jms服务器才会当作发送成功,并删除消息。
  • DUPS_OK_ACKNOWLEDGE允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。

接口文档中并没有,明确说明为什么支持事务后,消息被消费后,不会删除。但是实际情况是这样的。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值