在两个ActiveMQ队列之间配置Apache Camel路由,以将生产者用于特定的目标队列,而不是使用未标识的生产者

时间:2018-12-27 21:37:11

标签: java apache-camel activemq

我正在尝试使用ActiveMQ配置Apache Camel,以在 my ActiveMQ服务器上的队列和远程 ActiveMQ服务器上的队列之间建立桥梁。到目前为止很简单。这是我的camel.xml的相关内容:

<camelContext xmlns="http://camel.apache.org/schema/spring" id="camel">
  <route>
    <from uri="local:Request"/>
    <to uri="remote:Request"/>
  </route>
</camelContext>

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

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

我已经在我控制的两台服务器上对此进行了测试,并且工作正常。但是,我要连接的远程服务器是一个我不要控件,并且(可能是由于定制授权编写不正确),它表现出的行为似乎没有与骆驼很好地配合。

问题是这样的:远程服务器依赖于连接到它的所有Producer实例,这些实例用于指定的目的地,而默认情况下,骆驼似乎会创建一个 unidentified 生产者(JMS reference for context)。如果创建了一个未知的生产者,则此远程服务器将简单地终止连接。

所以我的问题是:是否有一种方法可以强制Camel 使用身份不明的生产者,最好无需修改Camel源代码? / p>

1 个答案:

答案 0 :(得分:0)

您对指定目的地的描述听起来像ProducerTemplate的默认端点。我不知道这是否真的可以创建您想要的生产者,但是您可以尝试一下。

创建一个Java Bean,该Java Bean使用ProducerTemplate将消息发送到远程代理。创建ProducerTemplate with a default endpoint,以便您无需指定端点即可发送消息。

然后更改您的路线以将bean用作发件人

.to("bean:mySenderBean")