2

我的骆驼路线如下

 <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring" >
    <route>
      <from uri="bean:SendClass?method=send" />
      <to uri="jms:MyQueue" pattern="InOnly" />
    </route>
    <route>
    <from uri="jms:MyQueue" />
    <to uri="bean:recvClass?method=recv" />
    </route>
  </camelContext>

send 方法在由第 3 方 Pojo 以不规则的时间间隔激活时发送消息。但是,我认为的问题是,一旦 recv bean 接收到消息并重新发送相同的消息(一秒钟内有数百条消息),骆驼就会重新启动路由)。理想情况下,我希望它在发送方法被激活并创建新消息时发送消息(即 JMS 队列应该具有唯一的消息)。我该怎么做?

可能的解决方案是:

  1. 他们的一些属性是我可以放在里面<from.../>来做到这一点的吗?
  2. 编写一个处理器来过滤发送 bean 和队列之间的唯一消息。
  3. 他们是否有其他方式来路由它而不使用<from uri="bean:..." />

谢谢 sanre6

4

1 回答 1

2

你不应该有第一条路线。当你这样做时,你告诉 Camel 不断地调用那个 bean 上的 send 方法并路由它。因此,为什么您每秒会看到 100 条消息。

相反,您应该使用 bean 代码中的一些 Camel API 并将消息发送到 JMS 队列。例如使用 ProducerTemplate。

于 2010-10-03T08:54:38.440 回答