activemq 消息阻塞优化和消息确认机制优化
一、消息阻塞优化
1.activemq消费者在从待消费队列中获取消息是会先进行预读取,默认是1000条(prefetch=1000)。这样很容易造成消息积压。
2.可以通过设置prefetch的默认值来调整预读取条数,java代码如下
//设置预读取为1ActiveMQPrefetchPolicy p = new ActiveMQPrefetchPolicy();p.setQueuePrefetch(1);//创建一个链接工厂connectionFactory = new ActiveMQConnectionFactory(username, pwd, url_one);//设置预读取为1connectionFactory.setPrefetchPolicy(p); //从工厂中创建一个链接connection = (ActiveMQConnection) connectionFactory.createConnection();//启动链接connection.start();//创建一个事物sessionsession = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);queue = session.createQueue(queueResponse);consumer = session.createConsumer(queue);//设置消息监听器consumer.setMessageListener(new ReceiveListener()); 二、消息确认机制优化1.activemq默认是自动确认消费机制,即消费者接收了此消息,此消息便从待消费队列中剔除,进入已消费队列。2.我们可以将消费确认模式改成手动确认。java代码如下:
//创建一个事物session
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
createSession(paramA,paramB);
paramA 取值有 : true or false 表示是否支持事务
paramB 取值有:Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE,SESSION_TRANSACTE
createSession(paramA,paramB);
paramA是设置事务的,paramB设置acknowledgment mode
paramA设置为false时:paramB的值可为Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE其中一个。
paramA设置为true时:paramB的值忽略, acknowledgment mode被jms服务器设置为SESSION_TRANSACTED 。
Session.AUTO_ACKNOWLEDGE为自动确认,客户端发送和接收消息不需要做额外的工作。
Session.CLIENT_ACKNOWLEDGE为客户端确认。客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。jms服务器才会删除消息。
DUPS_OK_ACKNOWLEDGE允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。在需要考虑资源使用时,这种模式非常有效。
3.然后在消费者监听器中,调用
msg.acknowledge(); 方法来手动返回消费确认标志。代码如下:
@Override public void onMessage(Message message) {
TextMessage msg = (TextMessage) message;
//do something
msg.acknowledge();
}
转载于:https://www.cnblogs.com/raymond-yan/p/10449646.html
activemq 消息阻塞优化和消息确认机制优化相关推荐
- springboot + rabbitmq 用了消息确认机制,感觉掉坑里了
最近部门号召大伙多组织一些技术分享会,说是要活跃公司的技术氛围,但早就看穿一切的我知道,这 T M 就是为了刷KPI.不过,话说回来这的确是件好事,与其开那些没味的扯皮会,多做技术交流还是很有助于个人 ...
- Java短信确认机制_JAVA 消息确认机制之 ACK 模式
JAVA 消息确认机制之 ACK 模式 CLIENT_ACKNOWLEDGE : 客户端手动确认, 这就意味着 AcitveMQ 将不会 "自作主张" 的为你 ACK 任何消息, ...
- RabbitMQ之消息确认机制(事务+Confirm)
概述 在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的消息丢失,除此之外我们还会遇到一个问题,当消息的发布者在将消息发送出去之后,消息到底有没有正确到达brok ...
- java确认rabbitmq_RabbitMQ 消息确认机制
生产端 Confirm 消息确认机制 消息的确认,是指生产者投递消息后,如果 Broker 收到消息,则会给我们生产者一个应答.生产者进行接收应答,用来确定这条消息是否正常的发送到 Broker ,这 ...
- rabbitmq消息确认机制及死信队列的使用
关于rabbitmq的基本概念和相关的理论这里就不做过多介绍了,在之前的篇幅中有过相应的介绍,也可以查询一些资料详细了解一下rabbitmq的基础知识,下面要介绍的点主要包括两个方面, 1.rabbi ...
- MQ 入门(四)—— 消息确认机制Ack
一.ACK机制简介 ACK (Acknowledgement),即确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符.表示发来的数据已确认接收无误. JMS API中约定了Client端可以 ...
- RabbitMQ(八):SpringBoot 整合 RabbitMQ(三种消息确认机制以及消费端限流)
说明 本文 SpringBoot 与 RabbitMQ 进行整合的时候,包含了三种消息的确认模式,如果查询详细的确认模式设置,请阅读:RabbitMQ的三种消息确认模式 同时消费端也采取了限流的措施, ...
- Storm编程入门API系列之Storm的可靠性的ACK消息确认机制
概念,见博客 Storm概念学习系列之storm的可靠性 什么业务场景需要storm可靠性的ACK确认机制? 答:想要保住数据不丢,或者保住数据总是被处理.即若没被处理的,得让我们知道. publi ...
- 最近发现系统rabbitmq丢消息比较严重,于是想了些方案来查找原因,给将消息发送方式添加确认机制。 我们在本地模拟了wms发送打标消息的场景. 1. 有事务 2. 先发点对点队列, 再发订
最近发现系统rabbitmq丢消息比较严重,于是想了些方案来查找原因,给将消息发送方式添加确认机制. 我们在本地模拟了wms发送打标消息的场景. 1. 有事务 2. 先发点对点队列, 再发订阅队列 3 ...
最新文章
- 项目CPU异常高分析
- pytorch学习笔记 torchnn.ModuleList
- 趣说API HTTP 状态码的使用
- lgg7深度详细参数_深度学习平均场理论第七讲:Batch Normalization会导致梯度爆炸?...
- 2018年第九届蓝桥杯C/C++ C组国赛 —— 第四题:约瑟夫环
- C++数组与指针概念
- .NET(C#)有哪些主流的ORM框架
- JavaScript Iframe富文本编辑器中的光标定位
- 【软件工程】系统规划的不同方法
- Python——腾讯在线编程题(2018)
- 日常视频一秒变游戏,人物可以随意操控:全靠Facebook的实时算法
- Deep Learning学习随记(二)Vectorized、PCA和Whitening
- c语言计算器程序代码有优先级,C语言计算器小程序(源代码+实习报告).doc
- 超级详细的iptables介绍
- C# Winform鼠标样式设置方法
- uniform,attribute和varying
- (第二章)HTML基本标记
- 最新短网址链接生成系统源码+短链防红功能
- 落户上海市高校毕业生就业指导中心集体户口办理办法
- 变态java面试题一览