0

我们在 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 的实例,它允许我对相应的 jmsTemplate 使用 setUseAsyncSend()。所以我也不能使用这个选项。

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

问题 1) 如果在入站消息中设置了属性“useAsyncSend”,有没有一种方法可以检查消费者端?这是为了验证我在生产者方面所做的事情是否确实有效。请注意,我使用骆驼上下文将消息路由到最终消费者。有没有办法在 come-context 中检查这一点?是否有一个标题或任何与此相对应的东西?

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

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

感谢您对此的任何帮助。

谢谢

4

1 回答 1

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。

于 2013-10-22T16:17:43.823 回答