我有一个旧的应用程序,它用ActiveMQ 5.8.0处理JMS消息,还有一些JNDI远程主题连接到这个ActiveMQ。
我有一个这样的连接器:
<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>
它工作得很好,但是现在,由于一些技术原因(严格的JMS 1.1),我需要使用“ConnectionFactory”而不是“TopicConnectionFactory”。在实际配置中,我被卡住了,因为ActiveMQ似乎使用了“TopicConnectionFactory”而不是“ConnectionFactory”,而我的新类“MyConnectionFactoryImpl”现在实现了“ConnectionFactory”:
nested exception is org.springframework.beans.ConversionNotSupportedException:
Failed to convert property value of type 'com.webmethods.jms.impl.MyConnectionFactoryImpl'
to required type 'javax.jms.TopicConnectionFactory'
for property 'outboundTopicConnectionFactory';
nested exception is java.lang.IllegalStateException:
Cannot convert value of type [com.webmethods.jms.impl.MyConnectionFactoryImpl]
to required type [javax.jms.TopicConnectionFactory] for property 'outboundTopicConnectionFactory':
no matching editors or conversion strategy found
在"org.apache.activemq.network.jms.JmsConnector"类中,它到处使用"TopicConnectionFactory",这在JMS 1.1中不再被推荐。
编辑:根据@Justin Bertram,我需要使用Camel而不是ActiveMQ嵌入式桥接器。但我找不到任何XML配置的例子,可以用来替换我的实际的双bean JMSConnector。保存XML配置文件的简单方法是什么?
我认为让代码返回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到JMS桥的留档(即org.apache.activemq.network.jms.JmsConnector
)所述:
ActiveMQ为实现JMS 1.0.2及以上规范的其他JMS提供程序提供桥接功能。
换句话说,JMS到JMS桥的整个目标是使用JMS 1.0.2接口。将其更改为仅使用JMS 1.1将无法达到目的。
该文档还指出,您应该使用Camel,而不是JMS到JMS桥:
警告,先试试骆驼!
请注意,我们建议您考虑使用Apache Camel将ActiveMQ连接到任何消息代理(或任何其他技术、协议或中间件),因为这样做更容易:
因此,我建议您使用Camel而不是org。阿帕奇。activemq。网络jms。JMS连接器
。
问题内容: 编辑:改写问题: 我想将ActiveMQ用作服务器和客户端应用程序之间的信使服务。 我正在尝试在服务器内设置嵌入式代理(即不是单独的进程),以处理产生的消息供我的客户使用。该队列被保留。 经纪人初始化如下: 修补之后,我最终得到了服务器部分: 客户端非常相似,看起来像这样: main方法只是在线程中启动其中的每一个,以开始生成/接收消息。 …但是我在每个线程的开头都遇到以下问题: 看来
我正在尝试设置一个支持SSL的嵌入式ActiveMQ代理。 我不断得到相同的错误msg: 搜索这给出了在生成密钥存储和信任存储时可能发生故障的指示。 我试图使用这些指南生成密钥存储和信任存储,但没有成功。http://docs.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CreateKeysto
我已经做了什么: > 在Weblogic 11g节点上配置的JMS服务器 配置的外部服务器-AMQ连接工厂和绑定到本地JNDI的源队列对象(OK:Conn.工厂和队列对象可见于服务器JNDI树中) 用默认道具创建JMS桥(好吧-我想) 使用默认配置为目标目的地(Weblogic)创建了桥接目的地--在可能的情况下(OK:部署了资源适配器) 为源目标(AMQ)创建了桥接目标-JNDI属性,在可能的情
问题内容: 对于这两个消息传递系统中的哪个是我,我将不胜感激。 更容易管理 需要了解和避免的陷阱或魔术少 具有较少的总体依赖 很简单。 问题答案: 更容易管理 hornetQ具有清晰的管理API,并且非常易于使用。 需要了解和避免的陷阱或魔术少 hornetQ专为嵌入式案例设计。将其集成到代码中非常非常容易。实际上,您可以用少于10行的代码来完成此操作。 具有较少的整体依赖性 HornetQ上的所
我正在使用下面的代码自定义嵌入式ActiveMQ Artemis服务器。
主要内容:介绍,实现,DrawAPI.java,RedCircle.java,GreenCircle.java,Shape.java,Circle.java,BridgePatternDemo.java,相关文章推荐桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。 我们通过下