对某些消息使用'jms.useAsyncSend = true'并在消费者端验证它

时间:2013-10-16 09:46:30

标签: glassfish apache-camel activemq fuseesb

我们在Fuse ESB(7.1.0)中使用嵌入式activemq代理,消费者位于同一位置。

生产者客户端部署在远程GlassFish服务器上。它使用activeMQ资源适配器(5.6.0)和spring jms模板。客户端将消息发布到不同的队列。我想要一些消息(转到给定队列)使用jms.useAsyncSend = true,其他消息应该使用默认值。我看到以下选项

1)我无法在资源适配器URL中追加选项'jms.useAsyncSend = true',因为这会对所有消息强制执行。

2)连接工厂的JNDI查找返回'org.apache.activemq.ra.ActiveMQConnectionFactory'的实例。我实际上期待一个org.apache.activemq.ActiveMQConnectionFactory的实例,它允许我使用setUseAsyncSend()作为相应的jmsTemplate。所以我也不能使用这个选项。

3)我在GlassFish连接器下配置了多个连接工厂(每个队列一个)。我试图将属性'jms.useAsyncSend = true'作为附加属性传递给特定的连接工厂。我希望这只用于在该特定连接池中创建的连接。现在,完成这项工作后,我想验证它是否真的有效。

问题1)如果在入站消息中设置了属性“useAsyncSend”,是否可以检查消费者方面?这是为了验证我在生产者方面做了什么实际上有效。请注意,我使用camel-context将消息路由到最终消费者。有没有办法在来环境中检查这个?是否有标题或与此对应的任何此类内容?

问题2)是否有更好的方法在生产者端设置'useAsyncSend',其中一个资源适配器用于将消息发送到具有'useAsyncSend'的不同值的不同队列。

我理解'useAsyncSend'是一个activeMQ特定的配置,因此在jmstemplate接口中不可用

感谢您的任何帮助。

感谢

1 个答案:

答案 0 :(得分:0)

我不知道Fuse ESB,但我创建了具有不同属性的不同ActiveMQ连接(在我的例子中,它是RedeliveryPolicy)。然后,您可以指导生产者和消费者使用适当的连接。

因此,如果使用Spring xml来定义您的连接,它将看起来像这样:

<!-- Connection factory with useAsyncSend=true -->
<bean id="asyncCF" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="${broker.url}" />
    <property name="useAsyncSend" value="true" />
</bean>
<!-- Connection factory with useAsyncSend=false -->
<bean id="syncCF" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="${broker.url}" />
    <property name="useAsyncSend" value="false" />
</bean>

或者将useAsyncSend指定为url值的参数。

这可能对问题2有帮助。