公司使用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 fastersee more details at: http://camel.apache.org/jms<property name="transacted" value="true"/><property name="cacheLevelName" value="CACHE_CONSUMER" />-->
</bean>

这个正好符合我们的需要。而且顺便把连接换成了多线程,可以进一步提升效率。

需要注意的是,如果使用的是activemq5.6, 这样做会导致内存泄露,我会在下一篇博客中详述。

转载于:https://www.cnblogs.com/buptl/p/6520665.html

关于apache camel的消息转发效率相关推荐

  1. apache.camel_在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...

    apache.camel 从历史上看, Apache ActiveMQ消息代理最初是在大型消息以MB为单位而不是GB的情况下创建的,就像您今天所做的那样. 下一代代理Apache ActiveMQ A ...

  2. 在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...

    从历史上看, Apache ActiveMQ消息代理最初是在大型消息以MB为单位而不是GB的情况下创建的,就像您今天所做的那样. 下一代代理Apache ActiveMQ Artemis(或仅是Art ...

  3. Apache Camel –从头开始开发应用程序(第2部分/第2部分)

    这是本教程的第二部分,我们将使用Apache Camel创建发票处理应用程序. 如果您错过了它,一定要看一下第一部分 . 以前,我们已经定义了系统的功能要求,创建了网关,分离器,过滤器和基于内容的路由 ...

  4. Apache Camel入门

    在先前的博文中,我们了解了企业集成模式(EIP). 现在,在这篇文章中,我们将研究实现这些模式的Apache Camel框架. 关于骆驼: Apache Camel是一个开放源代码项目,已有将近5年的 ...

  5. Apache Camel教程– EIP,路由,组件,测试和其他概念的简介

    公司之间的数据交换增加了很多. 必须集成的应用程序数量也增加了. 这些接口使用不同的技术,协议和数据格式. 但是,这些应用程序的集成应以标准化的方式建模,有效实现并由自动测试支持. 企业集成模式(EI ...

  6. Apache Camel简介以及使用场景

    Apache Camel简介以及使用场景 我们要解决的问题以及解决方案 我们要解决的问题 EAI的常用解决方案 SOA架构模型 ESB企业服务总线 如何实现ESB 为什么使用Camel Camel可以 ...

  7. Apache Camel核心概念

    1. Camel中的相关概念 1.1 ROUTING ENGINE(路由引擎) Camel的路由引擎是消息移动的实际执行者,但并未暴露给开发者:不过作为开发者,我们应该意识到它的存在:并且它做了所有繁 ...

  8. Apache Camel 2.15.0 发布,Java 规则引擎

    Apache Camel 2.15.0 发布啦!!!该版本经过 6 个月开发,修复了超过 500 个 bug.但最值得关注的是给我们带来的新特性: 自文档 目录组件 Camel 工具类目录 重用 Ca ...

  9. apache camel 的 split 和 aggregate

    2019独角兽企业重金招聘Python工程师标准>>> split和aggregate,看图就明白了. 下面我用一个例子来说明,非常难得,你很难在网上找到apache camel这样 ...

最新文章

  1. Linux驱动入门篇(一):Hello, world
  2. 解救小易——网易笔试
  3. ELI5 和scikit-learn文本分类管道
  4. 【深度学习】——日常知识点总结(持续更新)
  5. 阿里云数据库Mysql被黑
  6. php基础教程(二):基础语法
  7. OpenGl 游戏编程笔记 第七章:纹理映射 (texture mapping) (一)
  8. VUE配置本地代理服务器
  9. Properties和ResourceBundle类
  10. KEIL arm C51中常量变量函数的绝对地址设定
  11. 笔记本运行php的快捷键是啥,雷神笔记本u盘启动快捷键是什么|雷神笔记本按哪个键进u盘启动...
  12. LWN:两组跟memory-tier有关的patch!
  13. Python计算机视觉 sift和Harris特征匹配处理对比
  14. [计算机视觉] AprilTag: A robust and flexible visual fiducial system(2011)论文理解
  15. 元数据管理器中存在错误
  16. Rust之错误处理(三):panic!还是不要panic!
  17. 开发者必须关注的工具合集,受益终生!
  18. android usb采集卡,USB HDMI直播采集卡1805怎么用?
  19. 22款奔驰GLC260L改装23P驾驶辅助系统,这几大功能你还是有必要知道的!
  20. 史上最全因果推断合集-10(滴滴的国际化外卖团队智能补贴实战)

热门文章

  1. sql 备份.bat
  2. 五种JSP页面跳转方法详解
  3. DELL Poweredge服务器安装操作系统指南 补全之磁盘驱动制作
  4. Windows 8 / 8.1 禁用驱动签名最详细图文教程
  5. JS实现图片上传时的本地预览,兼容IE和firefox谷歌
  6. 最新zendframework1.11使用
  7. JWT: 基于Token的验证
  8. RxAndroid之操作数据库SqlBrite(RXAndroid实现数据库的增、删、改、查)
  9. Observable.OnSubscribe 的理解
  10. 支付宝sdk 支付订单查询失败