Apache camel ActiveMQ嵌入式桥到驼峰JMS桥
我有一个使用ActiveMQ 5.8.0处理JMS消息的旧应用程序,还有一些连接到此ActiveMQ的JNDI远程主题 我有一个这样的连接器:Apache camel ActiveMQ嵌入式桥到驼峰JMS桥,apache-camel,jms,activemq,jndi,camel-jms,Apache Camel,Jms,Activemq,Jndi,Camel Jms,我有一个使用ActiveMQ 5.8.0处理JMS消息的旧应用程序,还有一些连接到此ActiveMQ的JNDI远程主题 我有一个这样的连接器: <bean class="org.apache.activemq.network.jms.JmsConnector"> <property name="outboundTopicConnectionFactory" ref="jmsConnectionFactoryTo"
<bean class="org.apache.activemq.network.jms.JmsConnector">
<property name="outboundTopicConnectionFactory" ref="jmsConnectionFactoryTo" />
<property name="outboundClientId" value="${remote.clientId}" />
<property name="jndiOutboundTemplate" ref="jndiTemplateTo" />
<property name="preferJndiDestinationLookup" value="true" />
<property name="inboundTopicBridges">
<list>
<bean class="org.apache.activemq.network.jms.InboundTopicBridge">
<property name="inboundTopicName" value="${remote.topic.to}"/>
<property name="localTopicName" value="${local.topic.to}"/>
<property name="consumerName" value="${remote.consumer.name}"/>
<property name="selector" value="${remote.selector}"/>
</bean>
</list>
</property>
</bean>
在“org.apache.activemq.network.jms.JmsConnector”类中,它在任何地方都使用“TopicConnectionFactory”,这在jms 1.1中不再推荐使用。
编辑:
根据@justinbertram的说法,我需要使用Camel而不是ActiveMQ嵌入式桥。但是我找不到任何XML配置的示例,可以用来替换我实际的双bean JMSConnector。保存XML配置文件的简单方法是什么?如(即org.apache.activemq.network.jms.JmsConnector
)所述:
ActiveMQ为实现JMS 1.0.2及以上规范的其他JMS提供程序提供桥接功能
换句话说,JMS到JMS桥的整个目标是使用JMS 1.0.2接口。将其更改为仅使用JMS 1.1将无法达到此目的
文档还指出,您应该使用Camel,而不是JMS-to-JMS桥:
警告,先试试骆驼
请注意,我们建议您考虑使用Apache Camel将ActiveMQ桥接到任何消息代理(或任何其他技术、协议或中间件),因为这样做更容易:
- 保持灵活性;很容易将不同的队列/主题映射到另一个提供程序上的一个或多个队列或主题
- 执行基于内容的路由、筛选和其他企业集成模式
- 允许您使用任何技术、协议或中间件,而不仅仅是JMS提供商
因此,我建议您使用Camel而不是
org.apache.activemq.network.jms.JmsConnector
我认为让您的代码返回TopicConnectionFactory
将是最简单的解决方案。甚至JMS 2.0规范也提供了TopicConnectionFactory
。无论您使用的是哪个版本的ActiveMQ,您都可以选择在代码中使用TopicConnectionFactory
,并将其提供给网桥
请注意,骆驼路线:
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="mqseries:Foo.Bar"/>
<to uri="activemq:Cheese"/>
</route>
</camelContext>
没有错误处理。例如,如果“to”端点已关闭,则此路由将从“from”端点读取消息,并将消息扔到地板上。此外,如果“to”组件未配置为使用缓存/池连接工厂,则将为每个发送的消息创建新的JMS连接。这会导致性能低下,并可能导致许多套接字处于TIME_WAIT状态。底线-小心琐碎的骆驼路线。谢谢你的回答,是的,我在文档中也看到了这一点。事实上,我是JMS的初学者,我希望fin是一个比使用camel更简单的解决方案。你有什么线索让我先看看我的实际配置吗?我不知道从哪里开始。。。谢谢引用的文档有一个简单的骆驼例子。还有一个。不管怎样,通常认为获得问题的答案,然后改变问题,使之前的答案基本上无效是不好的。通常,您只需将答案标记为正确(假设正确),然后创建一个新问题。评论中简短的后续问题当然可以,但你现在真的提出了一个完全不同的问题。我建议您创建一个新的示例,如果您正在寻找完整的JMS桥示例,请查看这些示例。
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="mqseries:Foo.Bar"/>
<to uri="activemq:Cheese"/>
</route>
</camelContext>