资讯专栏INFORMATION COLUMN

activemq与spring整合,配置消费者监听器设置sessionAcknowledgeMode

LiuRhoRamen / 2719人阅读

摘要:最近在研究的消息确认机制,在与整合时遇到的了一个问题。这时只需要把的值设置成自定义的类型即可。

最近在研究activemq的ack消息确认机制,在activemq与spring整合时遇到的了一个问题。
JMS规范的ack消息确认机制有一下四种,定于在session对象中:
AUTO_ACKNOWLEDGE = 1 :自动确认
CLIENT_ACKNOWLEDGE = 2:客户端手动确认
DUPS_OK_ACKNOWLEDGE = 3: 自动批量确认
SESSION_TRANSACTED = 0:事务提交并确认
但是在activemq补充了一个自定义的ACK模式:
INDIVIDUAL_ACKNOWLEDGE = 4:单条消息确认

如果想设置ack消息确认机制为客户端手动确认,在spring总配置消费者监听器的时候,设置sessionAcknowledgeMode的值为2,代码如下:

  
  
  
  
          
          
        
        
 

但这样设置是无效的,请看spring类org.springframework.jms.listener.AbstractMessageListenerContainer的一段源码:

protected void commitIfNecessary(Session session, Message message) throws JMSException {
        // Commit session or acknowledge message.
        if (session.getTransacted()) {
            // Commit necessary - but avoid commit call within a JTA transaction.
            if (isSessionLocallyTransacted(session)) {
                // Transacted session created by this container -> commit.
                JmsUtils.commitIfNecessary(session);
            }
        }
        else if (message != null && isClientAcknowledge(session)) {
            message.acknowledge();
        }
    }
protected boolean isClientAcknowledge(Session session) throws JMSException {
        return (session.getAcknowledgeMode() == Session.CLIENT_ACKNOWLEDGE);
}

就是当设置sessionAcknowledgeMode为2时,虽然是客户端手动确认,但是却被spring自动确认了,造成设置无效。这时只需要把sessionAcknowledgeMode的值设置成activemq自定义的类型INDIVIDUAL_ACKNOWLEDGE = 4即可。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66802.html

相关文章

  • 深入浅出 JMS(七) - ActiveMQ Spring 整合

    摘要:消费者,监听生产者往指定目的地发送消息后,接下来就是消费者对指定目的地的消息进行消费了。它不会动态的适应运行时需要和参与外部的事务管理。它很好的平衡了对提供者要求低先进功能如事务参与和兼容环境。 深入浅出 JMS(七) - ActiveMQ 与 Spring 整合 一、与spring整合实现ptp的同步接收消息 (1)config.properties ## ActiveMQ Conf...

    NoraXie 评论0 收藏0
  • Spring boot 集成 ActiveMQ

    摘要:安装到官方网站下载最新的的安装包,并解压到本地目录下,下载链接如下。修改消费者使用配置消费者监听的队列,其中是接收到的消息收到的报文为接收到的消息重新执行 安装ActiveMQ 到Apache官方网站下载最新的ActiveMQ的安装包,并解压到本地目录下,下载链接如下:http://activemq.apache.org/do...。showImg(https://segmentfau...

    Donne 评论0 收藏0
  • 消息队列ActiveMQ的使用详解

    摘要:学习消息队列的使用之前,我们先来搞清。是操作消息的接口。消息生产者由创建,并用于将消息发送到。接收消息打印结果这是接收到的消息消费者启动。。。。 通过上一篇文章 《消息队列深入解析》,我们已经消息队列是什么、使用消息队列的好处以及常见消息队列的简单介绍。 这一篇文章,主要带大家详细了解一下消息队列ActiveMQ的使用。 学习消息队列ActiveMQ的使用之前,我们先来搞清JMS。 J...

    niceforbear 评论0 收藏0
  • Spring Boot 参考指南(消息传递)

    摘要:还自动配置发送和接收消息所需的基础设施。支持是一个轻量级的可靠的可伸缩的可移植的消息代理,基于协议,使用通过协议进行通信。 32. 消息传递 Spring框架为与消息传递系统集成提供了广泛的支持,从使用JmsTemplate简化的JMS API到使用完整的基础设施异步接收消息,Spring AMQP为高级消息队列协议提供了类似的特性集。Spring Boot还为RabbitTempla...

    Doyle 评论0 收藏0
  • 慕课网_《Java消息中间件》学习总结

    摘要:时间年月日星期六说明本文部分内容均来自慕课网。这个时候,可以启动多台积分系统,来同时消费这个消息中间件里面的登录消息,达到横向扩展的作用。 时间:2017年07月22日星期六说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:https://github.com/zccodere/s... 第一章:课程介绍 1-1 课程安排 Java...

    twohappy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<