将Apache Camel嵌入ActiveMQ代理可以为使用Camel的集成功能扩展消息代理提供极大的灵活性。 Apache Camel路由的另一个好处是,如果使用activemq组件 ,则可以避免远程连接到ActiveMQ的序列化和网络开销。 关于Apache ActiveMQ真正伟大的事情之一是,它与Apache Camel一起运行得很好 。

但是,如果您想更改流经ActiveMQ消息代理本身的消息的行为,则将仅限于附带的ActiveMQ Broker 拦截器集 –或开发自己的Broker插件 –然后将其作为罐子引入类路径中为ActiveMQ经纪人。

但是,真正有用的是将Interceptors和Camel结合在一起,从而使使用Camel路由配置Broker Interceptor更加容易,而这正是我们即将与代理 Camel Component一起发布的ActiveMQ 5.9所做的。 您可以将camel.xml文件包含到ActiveMQ代理配置中 ,然后,如果您希望将所有发送到队列的消息都发送到Queue并将其发布到Topic,并在此过程中更改其优先级,则可以执行以下操作:

<route id="setPriority"><from uri="broker:topic:test.broker.>"/><setHeader headerName="JMSPriority"><constant>9</constant></setHeader><to uri="broker:queue:test.broker.component.queue"/>
</route>

需要注意的几件事:

  • 代理程序组件仅在拦截器启动时才将拦截器添加到代理程序中-因此,代理程序组件在使用前将不会向运行中的代理程序添加任何开销-这样开销将变得很小。
  • 当代理已接收到消息时,但在消息被处理(持久化或路由到目的地)之前,您可以使用代理组件来拦截消息。
  • CamelExchange上的in消息既是Camel消息,也是JMS消息(通过ActiveMQ从Stomp / MQTT / AMQP等途径路由的消息始终转换为JMS消息)。
  • 您可以在目标上使用通配符来拦截来自与通配符匹配的目标的邮件。
  • 截取之后,您必须将消息显式发送回代理组件–这允许您丢弃选择消息(不发送)–或像上述情况一样–将消息重新路由到其他目标。
  • 但是,有一个刻意的警告,您只能将消息发送到已被拦截的代理组件,即,从另一个组件(例如,文件)路由骆驼消息将导致错误。

在activemq-broker软件包中添加了一些额外的类-在不使用JMX的情况下启用正在运行的代理的视图-并支持使用broker组件:

org.apache.activemq.broker.view.MessageBrokerView –提供检索代理统计信息的方法,并从MessageBrokerView –您可以检索特定目标的org.apache.activemq.broker.view.BrokerDestinationView 。 这意味着您可以通过执行以下操作来在代理内部添加灵活的路由-在目标队列深度达到特定限制时路由消息:

<camelContext id="camel" trace="false" xmlns="http://camel.apache.org/schema/spring"><route id="routeAboveQueueLimitTest"><from uri="broker:queue:test.broker.queue"/><choice><when><spel>#{@destinationView.queueSize >= 100}</spel><to uri="broker:queue:test.broker.processLater"/></when><otherwise><to uri="broker:queue:test.broker.queue"/></otherwise></choice></route></camelContext><bean id="brokerView" class="org.apache.activemq.broker.view.MessageBrokerView"><constructor-arg value="testBroker"/></bean><bean id="destinationView" factory-bean="brokerView" factory-method="getDestinationView"><constructor-arg value="test.broker.component.route"/></bean>

这使用的是Camel Message Router模式-请注意在when子句中使用Spring表达式语言( spel )。

参考:来自JCG合作伙伴 Rob Davies的ActiveMQ 5.9的Apache Camel Broker组件,来自Open Source Integration博客上的Rob Davies 。

翻译自: https://www.javacodegeeks.com/2013/09/apache-camel-broker-component-for-activemq-5-9.html

适用于ActiveMQ 5.9的Apache Camel Broker组件相关推荐

  1. Apache Camel日志组件示例

    Apache Camel日志组件示例 您要将消息记录到底层的记录机制,请使用骆驼的log:组件. Camel使用sfl4j作为记录器API,然后允许您配置记录器实现. 在本文中,我们将使用Log4j作 ...

  2. 适用于微服务架构的Apache Camel

    在知道微服务架构被称为之前,我一直在使用它们. 我曾经使用过由隔离模块组成的管道应用程序,这些模块通过队列相互交互. 从那时起,许多(前)ThoughtWorks专家讨论了微服务. 首先是 Fred ...

  3. apache camel 相关配置_使用Apache Camel文件组件实现自定义流程策略

    迄今的尝试 h2> 我有以下启动处理的路由(名称模糊处理): @Override public void configure() throws Exception { getContext(). ...

  4. apache camel_Apache Camel日志组件示例

    apache camel Apache Camel日志组件示例 您要将消息记录到底层的记录机制中,请使用骆驼的log:组件. Camel使用sfl4j作为记录器API,然后允许您配置记录器实现. 在本 ...

  5. 一个Camel Multicast组件聚合策略问题的解决过程

    摘要:本文通过案例,发现了一个Camel Multicast组件聚合策略相关的问题.通过查看Camel源代码,找到了问题原因并给出了解决方案.希望本文可以帮助到遇到同样问题的Camel用户. 本文分享 ...

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

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

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

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

  8. 获得的经验:ActiveMQ,Apache Camel和连接池

    每隔一段时间,我会遇到一个与ActiveMQ的连接和池相关的有趣问题,而今天,我想讨论一些并不总是很清楚的问题,并且在使用ActiveMQ和Camel JMS时可能会导致您大量饮酒. 并不是说您无论如 ...

  9. 简化软件集成:一个Apache Camel教程

    本文来自于阮一峰,文章主要讲解了构建的流程,每个步骤介绍的较为详细,希望对大家有帮助. 软件很少(如果有的话)存在于信息真空中.至少,这是我们软件工程师可以为我们开发的大多数应用程序做出的假设. 在任 ...

最新文章

  1. 8种常被忽视的SQL错误用法,快来认领一下!
  2. 记录 之 tensorflow函数:tf.data.Dataset.from_tensor_slices
  3. element 修改分页样式_如何给wordpress网站的文章列表,添加分页效果?可以通过2种方式...
  4. python数据分类_Python数据挖掘实践—KNN分类
  5. Sigmoid函数与逻辑回归
  6. SQL Server where语句使用举例
  7. Redis 学习---(5)Redis 命令
  8. Android自定义view之ViewPager指示器——2
  9. Java集合框架知多少——干货!!!
  10. vuex中mutations数据响应
  11. 七月算法--12月机器学习在线班-第九次课笔记—推荐系统
  12. keepalived基本应用解析
  13. 丹泽尔 x 陆奇:扫地僧牛逼的日常
  14. 纷杂的Spring-boot-starter: 3 数据访问与spring-boot-starter-jdbc
  15. leetcode 155. Min Stack最小栈(中等)
  16. 浅析2D横版过关游戏关卡制作要点
  17. HDU - 5761 Rower Bo (非常详细的解答,有轨迹图)
  18. 【百度网盘安装不了怎么办】
  19. 伺服的基础知识及简单应用
  20. App开发到App Store上架,发布流程。

热门文章

  1. java序列化与深度拷贝
  2. 如何添加数据到session中
  3. java 键入_在Java中键入Safe SQL
  4. 无服务器–仅仅是构建现代应用程序的一种方法?
  5. javaee编程题_在JavaEE中使用CDI的简单面向方面的编程(AOP)
  6. 确定Java等价性的新时代?
  7. Java面试准备:15个Java面试问题
  8. javafx 自定义控件_JavaFX技巧10:自定义复合控件
  9. java用i/o查看文件_Java文件I / O基础
  10. activemq 内存_ActiveMQ中的温度,存储和内存使用百分比