activemq 消息阻塞优化和消息确认机制优化

news/2024/7/1 2:38:43

一、消息阻塞优化

1.activemq消费者在从待消费队列中获取消息是会先进行预读取,默认是1000条(prefetch=1000)。这样很容易造成消息积压。

2.可以通过设置prefetch的默认值来调整预读取条数,java代码如下

//设置预读取为1
ActiveMQPrefetchPolicy p = new ActiveMQPrefetchPolicy();
p.setQueuePrefetch(1);
//创建一个链接工厂
connectionFactory = new ActiveMQConnectionFactory(username, pwd, url_one);
//设置预读取为1
connectionFactory.setPrefetchPolicy(p);
//从工厂中创建一个链接
connection = (ActiveMQConnection) connectionFactory.createConnection();
//启动链接
connection.start();
//创建一个事物session
session = 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


http://lihuaxi.xjx100.cn/news/235264.html

相关文章

自己常用网站

在线批量生产iOS图标 http://www.atool.org/ios_logo.ph iOS MVVM RAC从框架到实战 http://www.cnblogs.com/leixu/articles/5344335.html cocoapods安装流程及使用 http://blog.csdn.net/p_igmihu/article/details/52858375 Swift - 使用Alamofire通过HTTPS进行网络请求…

数据库索引-基本知识

为什么80%的码农都做不了架构师?>>> 数据库索引--基本知识 有许多因素会影响数据库性能。最明显的是数据量:您拥有的数据越多,数据库的速度就越慢。虽然有很多方法可以解决性能问题,但主要的解决方案是正确索引数据库…

RxSwift Runtime分析(利用OC消息转发实现IOS消息拦截)原理同ReactiveCocoa

简要介绍:这是一篇介绍IOS消息拦截的文章,来源于对RxSwift源码的分析,其原理是利用Object-c的消息转发(forwardInvocation:)来实现(ReactiveCocoa中也是这个原理,而且是RXSwift借鉴的RAC和MAZeroingWeakRef),阅读本文章…

swift3.0友盟分享

经过(一)的讲解,大家应该可以按照友盟提供的测试账号可以集成友盟分享了,友盟目前集合了18个APP共27种分享,可以授权的有10个App:微信、QQ、新浪微博、腾讯微博、人人网、豆瓣、Facebook、Twitter、Linkedi…

HTTP 2.0与OkHttp

HTTP 2.0是对1.x的扩展而非替代,之所以是“2.0”,是因为它改变了客户端与服务器之间交换数据的方式。HTTP 2.0增加了新的二进制分帧数据层,而这一层并不兼容之前的HTTP 1.x服务器及客户端——是谓2.0。  在正式介绍HTTP 2.0之前,…

ZYKeyboardUtil 让键盘遮盖事件处理变得得心应手

Demo地址:https://github.com/liuzhiyi1992/ZYKeyboardUtil 键盘遮盖输入控件或按钮在日常app开发中避之不及,考虑各种情况下UI各种嵌套,最后还要注册监听再获取指定键盘信息。我们可以通过键盘处理工具类ZYKeyboardUtil避繁就简&#xff0c…

swift3.0三种反向传值

一 :通知 1.通知传值所用方法 // MARK: - private methods(内部接口) let NotifMycation NSNotification.Name(rawValue:"MyNSNotification") func tempbuttonAction() { //这个方法可以传一个值 NotificationCenter.default.post(name: NotifMycation, object: &q…

极光推送集成步骤详解

关于极光推送,本人也算做过几次,下面就给大家简单总结下我做时所遇到的问题。下面这个文件,需要你先导入极光SDK后才能调试,需要注意的是,极光推送不支持模拟器,所以需要真机调试,因此首先要做的…