我正在尝试使用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>
答案 0 :(得分:0)
您对指定目的地的描述听起来像ProducerTemplate的默认端点。我不知道这是否真的可以创建您想要的生产者,但是您可以尝试一下。
创建一个Java Bean,该Java Bean使用ProducerTemplate将消息发送到远程代理。创建ProducerTemplate with a default endpoint,以便您无需指定端点即可发送消息。
然后更改您的路线以将bean用作发件人
.to("bean:mySenderBean")