使用servicemix作为代理的apache camel没有使用消息

时间:2014-07-08 11:02:48

标签: apache-camel spring-data activemq spring-jms apache-servicemix

所以我尝试使用apache servicemix / camel来聚合来自JMS队列的一些消息。我的逻辑很简单我只想让它使用收到的最后一条消息,并且只在最后一条消息后3秒发送它。

我将servicemix设置为消息代理,并且我能够以这样的容量使用它,但它似乎没有触发路由。我之前从来没有这样做过,所以我可能会离开基地,但这就是我到目前为止(把它放在deploy / fedora-messaging / camel-context.xml中)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://camel.apache.org/schema/spring
        http://camel.apache.org/schema/spring/camel-spring.xsd">

    <camelContext xmlns="http://camel.apache.org/schema/spring">
       <route>
        <from uri="activemq:topic:fedora.apim.update.merge"/>

        <aggregate completionTimeout="3000">
            <correlationExpression>
                <simple>header.pid</simple>
            </correlationExpression>
          <to uri="log:events"/>
           <to uri="activemq:topic:fedora.apim.update"/>
        </aggregate>
    </route>
   </camelContext>

 <bean id="activemq"
      class="org.apache.activemq.camel.component.ActiveMQComponent">
      <property name="brokerURL" value="tcp://localhost:61616"/>
   </bean>
</beans>

osgi应用程序似乎无错误地启动和运行,并且在主题中接收并排队消息:fedora.apim.update.merge但是它们只是坐在队列中而不会被消耗或推送到目标队列。

1 个答案:

答案 0 :(得分:0)

我使用以下代理配置测试了您的路由作为独立应用程序(在ServiceMix容器之外),并且一切都按预期工作:

<broker xmlns="http://activemq.apache.org/schema/core" useJmx="true"
    persistent="false">
    <transportConnectors>
        <transportConnector uri="tcp://localhost:61616" />
    </transportConnectors>
</broker>

所以,我想,我们可以假设您的Camel路由定义不是问题,而是ActiveMQ配置和/或ServiceMix设置。

修改

请注意,如果没有活动订户连接到目标,则到JMS主题目标的邮件将丢失。如果需要某种持久性,请使用持久订阅者或JMS队列目标。