所以我尝试使用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但是它们只是坐在队列中而不会被消耗或推送到目标队列。
答案 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队列目标。