ActiveMQ的消息签收机制


         消费者客户端成功接收一条消息的标志是:这条消息被签收。

         消费者客户端成功接收一条消息一般包括三个阶段:

         1、消费者接收消息,也即从MessageConsumer的receive方法返回

         2、消费者处理消息

         3、消息被签收


        其中,第三阶段的签收可以有ActiveMQ发起,也可以由消费者客户端发起,取决于Session是否开启事务以及签收模式的设置。

        在带事务的Session中,消费者客户端事务提交之时,消息自动完成签收。

        在不带事务的Session中,消息何时以及如何被签收取决于Session的签收模式设置


       非事务Session可以设置如下几种签收模式:

       

Session.AUTO_ACKNOWLEDGE当消息从MessageConsumer的receive方法返回或者从MessageListener接口的onMessage方法返回时,会话自动确认消息签收
Session.CLIENT_ACKNOWLEDGE需要消费者客户端主动调用acknowledge方法签收消息,这种模式实在Session层面进行签收的,签收一个已经消费的消息会自动的签收这个Session已消费的所有消息:
   例如一个消费者在一个Session中消费了5条消息,然后确认第3条消息,所有这5条消息都会被签收
Session.DUPS_OK_ACKNOWLEDGE

这种方式允许JMS不必急于确认收到的消息,允许在收到多个消息之后一次完成确认,与Auto_AcKnowledge相比,这种确认方式在某些情况下可能更有效,因为没有确认,当系统崩溃或者网络出现故障的时候,消息可以被重新传递. 
这种方式会引起消息的重复,但是降低了Session的开销,所以只有客户端能容忍重复的消息才可使用。(如果ActiveMQ再次传送同一消息,那么消息头中的JMSRedelivered将被设置为true)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值