ActiveMQ(25):优化与建议

一、什么时候使用ActiveMQ

1、异步调用

2、一对多通信

3、做多个系统的集成,同构、异构

4、作为RPC的替代

5、多个应用相互解耦

6、作为事件驱动架构的幕后支撑

7、为了提高系统的可伸缩性

二、优化

ActiveMQ的性能依赖于很多因素,比如:

1:网络拓扑结构,比如:嵌入、主从复制、网络连接

2:transport协议

3:service的质量,比如topic还是queue,是否持久化,是否需要重新投递,消息超时等

4:硬件、网络、JVM和操作系统等

5:生产者的数量,消费者的数量

6:消息分发要经过的destination数量,以及消息的大小等

2.1、调整Prefetch Limit

ActiveMQ默认的prefetch大小不同的:

1:Queue Consumer 默认1000

2:Queue Browser Consumer默认500

3:Persistent Topic Consumer默认1000

4:Non-persistent Topic Consumer默认32767

Prefecth policy设置示例如下:

ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory();
Properties props = new Properties();
props.setProperty("prefetchPolicy.queuePrefetch", "1000");
props.setProperty("prefetchPolicy.queueBrowserPrefetch", "500");
props.setProperty("prefetchPolicy.durableTopicPrefetch", "1000");
props.setProperty("prefetchPolicy.topicPrefetch", "32767");
cf.setProperties(props);

也可以在创建Destination的时候设置prefetch size,示例如下:

Queue queue = new ActiveMQQueue("TEST.QUEUE?consumer.prefetchSize=10");
MessageConsumer consumer = session.createConsumer(queue);

2.2、控制生产者流量

可以通过xml配置,代码开启方式如下:

cf.setProducerWindowSize(1024000);

2.3、关闭消息的复制功能

能部分提高心能,在连接工厂上设置,如下:

ActiveMQConnectionFaction cf = …..
cf.setCopyMessageOnSend(false);

2.4、调整TCP协议

TCP协议是ActiveMQ中最常使用的协议,常见有如下配置会影响协议性能:

1:socketBufferSize:socket的缓存大小,默认是65536

2:tcpNoDelay:默认是false

示例如:

String url = "failover://(tcp://localhost:61616?tcpNoDelay=true)";
ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory(url);

2.5、消息自动确认

官方建议使用自动确认的模式,同时还可以开启优化确认的选项,如下:

ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory();
cf.setOptimizeAcknowledge(true);

在消费者这边,session会在一个单独的线程中分发消息给消费者,如果你使用的自动确认模式,为了增加吞吐量,你可以直接通过session传递消息给消费者,示例如下:

ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory();
cf.setAlwaysSessionAsync(false);

2.6、KahaDB消息存储优化

如果使用KahaDB进行消息存储的话,可以调整如下选项来优化性能:

1:indexCacheSize:默认为10000,用来设定缓存页的个数,默认情况一页是4KB,一般来说缓存的大小尽可能的设置大一些,以避免内存不足时频繁的交换。

2:indexWriteBatchSize:默认1000,用来设置脏索引(脏索引就是cache中的index和消息存储中的index状态不一样)达到多少之后,就需要把索引存储起来。如果你想最大化broker的速度,那么就把这个值设置的尽可能的大一些,这样的话,仅会在到达checkpoint的时候,索引才会被存储起来。但是这样会增大系统出错的时候,丢失大量的元数据的风险。

3:journalMaxFileLength:缺省32mb,当broker的吞吐量特别大的时候,日志文件会很快被写满,这样会因为频繁的关闭文件,打开文件而导致性能低下。你可以通过调整文件的size,减少文件切换的频率,从而获得轻微的性能改善。

4:enableJournalDiskSyncs:缺省为true,通常,broker会在给producer确认之前,把消息同步到磁盘上(并且确保消息物化到磁盘上)。你可以通过设置这个选项为false,从而获得本质的性能改善。但是这样的话,多少会降低broker的可靠性。

三、建议

1、尽量使用基于文件的消息存储方案,比如使用KahaDB的方式

2、可以考虑内嵌启动broker,这样应用和Broker之间可以使用VM协议通讯,速度快

3、尽量使用异步投递消息,示例如:cf.setUseAsyncSend(true);

4、非持久化消息比持久化消息更快

原因如下:

a:非持久化发送消息是异步的,Producer不需要等待Consumer的receipt消息

b:而持久化是要把消息先存储起来,然后再传递

5、Transaction比Non-transaction更快

时间: 2024-11-10 07:57:21

ActiveMQ(25):优化与建议的相关文章

IOS 性能优化的建议和技巧

IOS 性能优化的建议和技巧 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以在Twitter上关注@marcelofabri_. 性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的事项,你也很容易

25 优化技巧

1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为你管理retain和release的过程,所以你就不必去手动干预了.忘掉代码段结尾的release简直像记得吃饭一样简单.而ARC会自动在底层为你做这些工作.除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存. 2. 在正确的地方使用 reuseIdentifier 一

ActiveMQ(07):ActiveMQ结合Spring开发--建议

1.Camel框架支持大量的企业集成模式,可以大大简化集成组件间的大量服务和复杂的消息流.而Spring框架更注重简单性,仅仅支持基本的最佳实践. 2.Spring消息发送的核心架构是JmsTemplate,隔离了像打开.关闭Session和Producer的繁琐操作,因此应用开发人员仅仅需要关注实际的业务逻辑. 但是JmsTemplate损害了ActiveMQ的PooledConnectionFactory对session和消息producer的缓存机制而带来的性能提升. 3.新的Spring

关于Net开发中一些SQLServer性能优化的建议

一. ExecuteNonQuery和ExecuteScalar 对数据的更新不需要返回结果集,建议使用ExecuteNonQuery.由于不返回结果集可省掉网络数据传输.它仅仅返回受影响的行数.如果只需更新数据用ExecuteNonQuery性能的开销比较小. ExecuteScalar它只返回结果集中第一行的第一列.使用 ExecuteScalar 方法从数据库中检索单个值(例如id号).与使用 ExecuteReader 方法, 返回的数据执行生成单个值所需的操作相比,此操作需要的代码较少

数据库设计与SQL优化的建议

1. 用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数:通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担:能够分开的操作尽量分开处理,提高每次的响应速度:在数据窗口使用SQL时,尽量把使用的索引放在选择的首列:算法的结构尽量简单:在查询时,不要过多地使用通配符如SELECT * FROM T1语句,要用到几列就选择几列如:SELECT COL1,COL2 FROM T1:在可能的情况下尽量限制尽量结果集行数如:SELECT TOP 300 COL1,COL2,CO

MySQL参数优化测试建议

一.参数优化前压力测试0.优化测试前提虚拟机vm12.5,OS centos 6.9(系统已优化),cpu2(I5 4288u 2.6GHZ),MEM4GB ,HardDisk:Apple SSD(SM-0512F) 1.模拟数据库数据为了测试我们创建一个test1的库创建一个tb1的表,然后导入20万行数据,脚本如下:vim slap.sh #!/bin/bash HOSTNAME="localhost" PORT="3306" USERNAME="ro

哪些情况下会导致重排或重绘的发生?请给出性能优化的建议。

1.简述重排的概念浏览器下载完页面中的所有组件(HTML.JavaScript.CSS.图片)之后会解析生成两个内部数据结构(DOM树和渲染树),DOM树表示页面结构,渲染树表示DOM节点如何显示.重排是DOM元素的几何属性变化,DOM树的结构变化,渲染树需要重新计算.2.简述重绘的概念重绘是一个元素外观的改变所触发的浏览器行为,例如改变visibility.outline.背景色等属性.浏览器会根据元素的新属性重新绘制,使元素呈现新的外观.由于浏览器的流布局,对渲染树的计算通常只需要遍历一次就

android:布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!

1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayout,因为RelativeLayout的功能比较复杂,它的布局需要花费 风度哦的CPU实际. 布局优化的另一个手段就是采用<include>,<merge>,<viewstub>标签.<include>主要用于布局重用,<include>,<m

jQuery性能优化38建议---最引人注目的用户体验!

一.需要注意的是的定义jQuery当变量被添加varkeyword 然而,这并不jQuery.整个javascript开发过程,所有需要注意,一定不要将其定义为下面的示例: $loading = $('#loading'); //这个是全局定义,不知道哪里位置倒霉引用了同样的变量名,就会郁闷至死的 二.请使用一个var来定义变量 假设你使用多个变量的话,请例如以下方式定义: .代码例如以下: varpage = 0, $loading = $('#loading'), $body = $('bo