当一台服务器关闭时,Camel多播会中断

时间:2013-06-10 13:41:22

标签: jms apache-camel multicast

我有两台服务器需要相同的Feed信息(prod和test)。以下工作正常:

<ns2:route id="JSON-INT" xmlns:ns2="http://camel.apache.org/schema/spring">
    <ns2:from uri="mq:MY.MQ.FEED"/>
    <ns2:marshal ref="feedToJsonTransformer" id="marshal2"/>
    <ns2:to uri="direct:internal" id="to5"/>
</ns2:route>

<ns2:route id="INT-PROD-AND-TEST-INTERNAL" xmlns:ns2="http://camel.apache.org/schema/spring">
    <ns2:from uri="direct:internal"/>
    <ns2:multicast stopOnException="false" id="multicast1">
        <ns2:to uri="direct:prod" id="to6"/>
        <ns2:to uri="direct:test" id="to7"/>
    </ns2:multicast>
</ns2:route>

<ns2:route id="INT-PROD" xmlns:ns2="http://camel.apache.org/schema/spring">
    <ns2:from uri="direct:prod"/>
    <ns2:to uri="jms:appProd" id="to8"/>
</ns2:route>

<ns2:route id="INT-TEST" xmlns:ns2="http://camel.apache.org/schema/spring">
    <ns2:from uri="direct:test"/>
    <ns2:to uri="jms:appTest" id="to9"/>
</ns2:route>

然而,当我关闭我的测试服务器(并不总是需要并且花钱)大约一个小时后,生产服务器停止接收消息。我假设队列正在填补并停止进程?如果测试服务器出现故障,有没有办法忽略测试服务器?

1 个答案:

答案 0 :(得分:0)

我正在编写以下内容,因为我假设您没有将Exchange模式更改为InOut(因此您在发射后的模式下使用了JMS)。

我建议如下:

  • 要确保您的邮件不会永久停留在测试队列中,请尝试使用 timeToLive 选项。如果消息超时(默认为 null http://camel.apache.org/jms.html),JMS提供程序将从队列中删除消息 - 您可以防止内存问题。
  • 如果您不期望任何响应(您当前没有设置此响应),我将删除多播组件。如果您希望确保在所有响应到达之前该过程不会继续(并且您需要以某种方式聚合响应),这将非常有用。 所以我会选择以下内容:
<ns2:route id="JSON-INT" xmlns:ns2="http://camel.apache.org/schema/spring">
    <ns2:from uri="mq:MY.MQ.FEED"/>
    <ns2:marshal ref="feedToJsonTransformer""/>
    <ns2:to uri="jms:appProd"/>
    <ns2:to uri="jms:appTest?timeToLive=10000"/>
</ns2:route>

这很简单。不使用其他路线,它更具可读性,并告诉您究竟发生了什么。 希望这可以帮助, 盖尔盖伊