activemq(25):优化与建议

author author     2022-09-01     653

关键词:

一、什么时候使用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更快


本文出自 “我爱大金子” 博客,请务必保留此出处http://1754966750.blog.51cto.com/7455444/1928873

生产环境消息队列activemq的数据积压优化过程(代码片段)

...续还会出现各种交易量突发状况,以下为针对消息队列(ActiveMQ)的优化过程。2消息队列通信图3问题定位与分析3.1消息通知数据为什么会被 查看详情

activemq(07):activemq结合spring开发--建议

...仅仅需要关注实际的业务逻辑。 但是JmsTemplate损害了ActiveMQ的PooledConnect 查看详情

hbase优化操作与建议

 一、服务端调优  1、参数配置    1)、hbase.regionserver.handler.count:该设置决定了处理RPC的线程数量,默认值是10,通常可以调大,比如:150,当请求内容很大(上MB,比如大的put、使用缓存的scans)的时候,如果该值... 查看详情

erlanglist的使用与优化建议

...,主要说一些基本操作和常用的list函数,再讲一些可以优化的点。list基本操作 [plain] viewplain copy  1> 查看详情

activemq从入门到精通

这是关于消息中间件ActiveMQ的一个系列专题文章,将涵盖JMS、ActiveMQ的初步入门及API详细使用、两种经典的消息模式(PTPandPub/Sub)、与Spring整合、ActiveMQ集群、监控与配置优化等。话不多说,我们来一起瞧一瞧!JMS首先来说较早... 查看详情

elasticsearch实战-索引优化建议与原则

        在设计Elasticsearch索引之前,首先要合理地估算自己的物理需求,物理需求指数据本身的物理特性,包括如下几方面。   数据总量        业务所涉及的... 查看详情

elasticsearch实战-索引优化建议与原则

        在设计Elasticsearch索引之前,首先要合理地估算自己的物理需求,物理需求指数据本身的物理特性,包括如下几方面。   数据总量        业务所涉及的... 查看详情

如何优化activemq

】如何优化activemq【英文标题】:Howtooptimizeactivemq【发布时间】:2010-12-2012:32:35【问题描述】:我在用Java模拟过载服务器时使用ActiveMQ。主要是没问题,但是当我收到超过600个请求时,事情就发生了WTF!我认为瓶颈是我的主服务... 查看详情

建议“优化 SQL 查询的响应时间”

】建议“优化SQL查询的响应时间”【英文标题】:Recommendation"tooptimizetheresponsetimeofanSQLquery"【发布时间】:2012-08-2713:22:25【问题描述】:我想知道对于包含超过2.000.000条记录的表优化SQL查询的响应时间的最佳解决方案是什... 查看详情

activemq的端口监听介绍及端口优化

在activemq的conf/activemq.xml主配置文件里,有这样一段话,如图:650)this.width=650;"src="http://s3.51cto.com/wyfs02/M00/8B/6B/wKioL1hOO8GREhQQAAEBIUDtPqU599.png"title="1.png"alt="wKioL1hOO8GREhQQAAEBIUDtPqU599.png"/>这个图里 查看详情

activesession量持续走高即将故障原因分析与优化建议

...;就挂了。本文对其问题原因展开详细分析,以及提出优化建议方案。1.      基本环境描述1.1、  数据库环境配置情况 节点IP主机名主机型号OS版本数据库名实例名最大连接数110.XX.XXX.129dXXdbdb1IBMpow 查看详情

Spring集成:控制ActiveMQ连接

】Spring集成:控制ActiveMQ连接【英文标题】:Springintegration:controlActiveMQconnection【发布时间】:2021-05-1404:25:21【问题描述】:如果我想通过代码断开某些从机,我正在寻找在集群环境中启动应用程序后控制ActiveMQ连接。任何有关这... 查看详情

redis内存优化在vivo的探索与实践

介绍Redis内存结构及内存管理方式,同时分享一些内存优化建议及内存异常处理相关的优化措施。介绍Redis内存结构及内存管理方式,同时分享一些内存优化建议及内存异常处理相关的优化措施。分享vivo互联网技术干货与沙龙活... 查看详情

zookeeperzookeeper性能优化与配置详解一些踩坑建议(代码片段)

1.概述转载:https://www.cnblogs.com/EasonJim/p/7488834.htmlZooKeeper的功能特性通过ZooKeeper配置文件来进行控制管理(zoo.cfg配置文件)。ZooKeeper这样的设计其实是有它自身的原因的。通过前面对ZooKeeper的配置可以看出,对ZooKe... 查看详情

activemq消息阻塞优化和消息确认机制优化(代码片段)

一、消息阻塞优化1.activemq消费者在从待消费队列中获取消息是会先进行预读取,默认是1000条(prefetch=1000)。这样很容易造成消息积压。2.可以通过设置prefetch的默认值来调整预读取条数,java代码如下//设置预读取为1ActiveMQPrefetch... 查看详情

一位资深程序员大牛给予java提升技术的学习路线建议

...高可扩展、高性能、高并发、性能优化、Springboot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程 视频课程包含:高级Java架构师包含:Springboot、Spring cloud、Dubbo、Redis、ActiveMQ、Nginx、Mycat、Spring、MongoDB... 查看详情

lamp架构nginx并发优化平滑升级与回滚(代码片段)

一、nginx并发优化server1:172.25.2.1server2:172.25.2.2server3:172.25.2.3停止openresty中的nginx,开启原生nginx/usr/local/openresty/nginx/sbin/nginx-sstopsystemctlstartnginx.serviceserver2和server3安装apacheyuminstall-yht 查看详情

lamp架构nginx并发优化平滑升级与回滚(代码片段)

一、nginx并发优化server1:172.25.2.1server2:172.25.2.2server3:172.25.2.3停止openresty中的nginx,开启原生nginx/usr/local/openresty/nginx/sbin/nginx-sstopsystemctlstartnginx.serviceserver2和server3安装apacheyuminstall-yht 查看详情