ActiveMq性能优化
2013-03-07 15:00
323 查看
ActiveMq运行是比较稳定的,数据的吞吐速度也很高,如果出现入队列或者出队列慢的问题,先检查一下自己的代码,是不是本身取到数据后处理过慢。
本文的关于性能优化,其实是列举出一些需要注意的点,请确保你的项目没有一下问题:
1. 使用spring的JmsTemplate
JmsTemplate的send和convertAndSend会使用持久化mode,即使你设置了NON_PERSISTENT。这会导致入队列速度变得非常慢。
2. DeliveryMode的选择,如果你入队列的数据,不考虑MQ挂掉的情况(这概率很小),使用NON_PERSISTENT会显著提高数据写入速度。
3. 生产者使用事物会提高入队列性能,但是消费者如果启动了事物则会显著影响数据的消费速度。相关代码如下:
代码中的false代表不启动事物。
4. 消费者的消息处理即onMessage方法优化,举例如下:
这段代码使用了线程池,另一点要注意的是msg.getObject();这个方法是一个比较耗时的方法,你的代码中不应该出现多次getObject()。
5. 检查你的MQ数据吞吐速度,保持生产和消费的平衡,不会出现大量积压。
6.
ActiveMQ使用TCP协议时 tcpNoDelay=默认是false ,设置为true可以提高性能。
本文的关于性能优化,其实是列举出一些需要注意的点,请确保你的项目没有一下问题:
1. 使用spring的JmsTemplate
JmsTemplate的send和convertAndSend会使用持久化mode,即使你设置了NON_PERSISTENT。这会导致入队列速度变得非常慢。
2. DeliveryMode的选择,如果你入队列的数据,不考虑MQ挂掉的情况(这概率很小),使用NON_PERSISTENT会显著提高数据写入速度。
3. 生产者使用事物会提高入队列性能,但是消费者如果启动了事物则会显著影响数据的消费速度。相关代码如下:
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
代码中的false代表不启动事物。
4. 消费者的消息处理即onMessage方法优化,举例如下:
public class SmsMoPool implements MessageListener { private final static Logger logger = LoggerFactory.getLogger(SmsMoPool.class); private DefaultEventPubliser moEventPublisher; private final EventFactory eventFactory = new DefaultEventFactory(); private DefaultDataGather dataGather; private ExecutorService pool = Executors.newFixedThreadPool(5); @Override public void onMessage(final Message message) { pool.execute(new Runnable() { @Override public void run() { final ObjectMessage msg = (ObjectMessage) message; Serializable obj = null; try { obj = msg.getObject(); } catch (JMSException e) { logger.error("从消息队列获得上行信息异常{}", e); } if (obj != null) { dataGather.incrementDateCount(MasEntityConstants.TRAFFIC_SMS_MO_IN); AgentToServerReq req = (AgentToServerReq) obj; if (logger.isInfoEnabled()) { logger.info("驱动-->调度:{}", req.toXmlStr()); } Event event = eventFactory.createMoEvent(req); moEventPublisher.publishEvent(event); } } }); } }
这段代码使用了线程池,另一点要注意的是msg.getObject();这个方法是一个比较耗时的方法,你的代码中不应该出现多次getObject()。
5. 检查你的MQ数据吞吐速度,保持生产和消费的平衡,不会出现大量积压。
6.
ActiveMQ使用TCP协议时 tcpNoDelay=默认是false ,设置为true可以提高性能。
相关文章推荐
- 优化ActiveMQ性能
- activeMQ性能优化--对象池管理connection
- 系统间通信方式之(ActiveMQ的使用性能优化3)(十四)
- activemq性能优化
- ActiveMQ性能优化思路-03
- java架构师、集群、高可扩展、高性能、高并发、性能优化、Spring boot、Dubbo、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师之路
- ActiveMq性能优化
- 优化ActiveMQ性能
- 系统间通信方式之(ActiveMQ的使用性能优化之冰火两重天5)(十六)
- ActiveMq的性能优化
- 系统间通信方式之(ActiveMQ的使用性能优化之干柴烈火4)(十五)
- ActiveMQ性能优化思路-02
- 优化ActiveMQ性能(zhuan)
- ActiveMQ性能优化思路-01
- Go 性能优化技巧 8/10
- 性能优化-shuffle
- 没参加TechED,但是也想听《SharePoint 2007 网站性能优化》?
- 面向程序员的数据库访问性能优化法则
- 系统性能排查命令及优化思路 推荐