关于apache camel的消息转发效率
2015-08-08 20:55
627 查看
文章搬家至http://www.cnblogs.com/buptl/p/6520665.html
公司使用activemq和camel做消息的分发,之前数据量不是很大,所以一直没怎么考虑效率问题,对camel的工作原理研究也不深。单是最近随着业务量的增加,camel的效率逐渐成了瓶颈,所以根据日志大概了解了camel的工作原理。虽然camel是被嵌入到activemq中,但在工作过程中,camel和activemq其实还是相对独立的。我们在camel中会配置一个到activemq的连接.
看了下日志,发现这种配置下camel会有一个很严重的问题: camel每次执行转发操作时,都会新建一个到activemq的连接,之后再将其关闭。这严重拖慢了转发效率,因为事实上每次转发都可以使用同一个连接。
因此查了一下camel文档,找到了 http://camel.apache.org/activemq.html 。 里边有关于线程池的配置:
这个正好符合我们的需要。而且顺便把连接换成了多线程,可以进一步提升效率。
需要注意的是,如果使用的是activemq5.6, 这样做会导致内存泄露,我会在下一篇博客中详述。
公司使用activemq和camel做消息的分发,之前数据量不是很大,所以一直没怎么考虑效率问题,对camel的工作原理研究也不深。单是最近随着业务量的增加,camel的效率逐渐成了瓶颈,所以根据日志大概了解了camel的工作原理。虽然camel是被嵌入到activemq中,但在工作过程中,camel和activemq其实还是相对独立的。我们在camel中会配置一个到activemq的连接.
http://camel.apache.org/activemq.html关于vm这种传输方式,参考http://activemq.apache.org/vm-transport-reference.html
看了下日志,发现这种配置下camel会有一个很严重的问题: camel每次执行转发操作时,都会新建一个到activemq的连接,之后再将其关闭。这严重拖慢了转发效率,因为事实上每次转发都可以使用同一个连接。
因此查了一下camel文档,找到了 http://camel.apache.org/activemq.html 。 里边有关于线程池的配置:
<pre name="code" class="html"><bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop"> <property name="maxConnections" value="8" /> <property name="connectionFactory" ref="jmsConnectionFactory" /> </bean> <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> <property name="connectionFactory" ref="pooledConnectionFactory"/> <property name="concurrentConsumers" value="10"/> </bean> <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"> <property name="configuration" ref="jmsConfig"/> <!-- if we are using transacted then enable CACHE_CONSUMER (if not using XA) to run faster see more details at: http://camel.apache.org/jms <property name="transacted" value="true"/> <property name="cacheLevelName" value="CACHE_CONSUMER" /> --> </bean>
这个正好符合我们的需要。而且顺便把连接换成了多线程,可以进一步提升效率。
需要注意的是,如果使用的是activemq5.6, 这样做会导致内存泄露,我会在下一篇博客中详述。
相关文章推荐
- 解析ActiveMQ的使用说明总结
- ActiveMQ发消息、收消息、持久化,查询队列剩余消息数、出队数的实现
- activemq报EOFExceptionjvm错误
- 基于zookeeper+leveldb搭建activemq集群
- ActiveMQ 实例
- Ubuntu 14.04.1 安装 activemq 5.11.1
- 在Spring中使用ActiveMQ发送邮件
- 多个地市连接MQ,如果较长时间没有消息发送,ActiveMQ的消费端会自动断开连接(topic端)
- JMS和消息驱动Bean(MDB)
- JMS_使用ActiveMQ实现消息的发送和接收
- ActiveMQ 消息游标
- ActiveMQ 生产者流量控制
- ActiveMQ 全排序(Total Ordering)
- ActiveMQ 使用笔记
- ActiveMq 不能正确获取有过期时间的消息的原因
- Spring JMS笔记
- Spring和Apache CXF,ActiveMQ整合记录
- 解决apache activemq 前端推送延迟问题
- ActiveMQ
- ActiveMQ 启动Broker