使用JMSComponent广播消息

时间:2015-05-21 07:20:56

标签: queue jms apache-camel

我有一个问题,我必须将消息广播到不同的输出位置。我正在使用JMSComponent来配置我的输出队列。我的输出队列配置有这样的:

ConnectionFactory factory = createOrGetConnectionFactory(brokerUrl);
JmsConfiguration jmsConfiguration = new JmsConfiguration();
jmsConfiguration.setPreserveMessageQos(true);
jmsConfiguration.setConnectionFactory(factory);

counter++;
outputLocations = new StringBuilder("hubOutput"+counter+":queue://queueName");
JmsEndpoint endpoint = new JmsEndpoint();
JmsComponent component = new JmsComponent();
component.setConcurrentConsumers(5);
component.setConfiguration(jmsConfiguration);
component.setConnectionFactory(factory);

//Add new JMS component in the context. This is done so that the output locations having same queue can be differentiated using the component name in camel registry.                       getContext().addComponent("hubOutput"+counter, component);
endpoint = (JmsEndpoint) component.createEndpoint(outputLocations.toString());
endpoint.setConfiguration(jmsConfiguration);

我有一个用于将消息广播到输出队列的驼峰路由。

from(fromLocation)
    .setHeader("hubRoutesList",constant(hubUrl))
    .log(urlToLog)
    .setExchangePattern(ExchangePattern.InOnly)
    .multicast()
    .parallelProcessing()
    .to(hubUrl.split(","));

所有输出队列都有不同的代理URL但队列名称相同。 代码正常工作但如果其中一个队列关闭,则该消息也不会广播到其他队列。

请帮助我。

谢谢, Richa

1 个答案:

答案 0 :(得分:1)

您可以使用recipientList而不是.to(hubUrl.split(“,”));

使用选项stopOnException = false(即defaultValue),即使其中一个队列已关闭,也不会停止将消息转发到其他端点。 有关详细信息,请参阅http://camel.apache.org/recipient-list.html