Apache camel 使用ApacheCamel在两个bean之间进行路由时出现问题

Apache camel 使用ApacheCamel在两个bean之间进行路由时出现问题,apache-camel,Apache Camel,我的骆驼路线如下 <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>

我的骆驼路线如下

 <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方法在被第三方Pojo不定期地激活时发送消息。但是,我认为问题是camel正在重新启动 一旦recv bean接收到消息并重新发送相同的消息(一秒钟内发送一百条消息),路由就会发生变化 当send方法被激活并且创建了一条新消息(即JMS队列应该具有唯一的消息)时发送消息。我如何做到这一点

可能的解决办法是:

  • 我可以将它们的某些属性放入
    中来执行此操作吗
  • 编写一个处理器来过滤发送bean和队列之间的唯一消息
  • 他们是否有其他不使用
  • 谢谢
    sanre6

    您不应该有第一条路线。当您这样做时,您会告诉Camel不断调用该bean上的send方法并对其进行路由。这就是为什么你每秒会看到100条消息


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

    我认为我可以一次性使用SpringXML或JavaDSL。所以,如果我像template.sendBody(“activemq:MyQueue”,“world!”)一样使用Producertemplate;。。。。那就意味着我必须使用JavaDSL,对吗?如何使用SpringXML实现这一点。感谢您对send()方法的Java代码的回答。这是将消息发送给Camel的地方,因为调用send()方法时会发生这种情况。有没有一种方法可以直接在camelcontext xml文件中执行,而不使用java代码中的注释?您可以隐藏中间件。在你的另一个问题中看到我的答案。