适用于ActiveMQ 5.9的Apache Camel Broker组件

将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 )。


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值