当目的地不可用时如何停止使用骆驼路线中的消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当目的地不可用时如何停止使用骆驼路线中的消息相关的知识,希望对你有一定的参考价值。

我正在使用Camel桥接IBM和ActiveMQ队列。

一切正常,但是当目的地由于网络问题而变得不可用时,所有处理的消息都将丢失。

如果目的地不可用,骆驼应停止从原地消费,并在目的地可用时重新开始,但我找不到正确的模式/配置来做到这一点。

我正在配置从IBM MQ到IBM MQ的路由,但我正在寻找一种解决IBM和ActiveMQ的组合的方法。

<bean id="lsywmq" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory">
        <bean class="com.ibm.mq.jms.MQQueueConnectionFactory">
            <property name="transportType" value="1" />
            <property name="hostName" value="$mq_lsy_hostname" />
            <property name="port" value="$mq_lsy_port" />
            <property name="queueManager" value="$mq_lsy_queuemanager" />
            <property name="channel" value="$mq_lsy_channel" />
            <property name="useConnectionPooling" value="true" />
        </bean>
    </property>
</bean>

<bean id="wmq" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory">
        <bean class="com.ibm.mq.jms.MQQueueConnectionFactory">
            <property name="transportType" value="1" />
            <property name="hostName" value="$mq_hostname" />
            <property name="port" value="$mq_port" />
            <property name="queueManager" value="$mq_queuemanager" />
            <property name="channel" value="$mq_channel" />
            <property name="useConnectionPooling" value="true" />
        </bean>
    </property>
</bean>

<camelContext xmlns="http://camel.apache.org/schema/blueprint"
    allowUseOriginalMessage="false" >
    <route id="EFF2AVIO">
        <from uri="lsywmq:queue:mq_lsy_queue"/>
        <to uri="wmq:queue:mq_queue"/>
            </route>
</camelContext>

我想让它作为管道工作,如果它卡在目标位置,则所有管道仍然卡住。

答案

要实现此行为,您需要将JMS组件的transacted选项设置为true

<bean id="lsywmq" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory">
    <bean class="com.ibm.mq.jms.MQQueueConnectionFactory">
        <property name="transportType" value="1" />
        <property name="hostName" value="$mq_lsy_hostname" />
        <property name="port" value="$mq_lsy_port" />
        <property name="queueManager" value="$mq_lsy_queuemanager" />
        <property name="channel" value="$mq_lsy_channel" />
        <property name="useConnectionPooling" value="true" />
        <property name="transacted" value="true"/>
    </bean>
</property>

以上是关于当目的地不可用时如何停止使用骆驼路线中的消息的主要内容,如果未能解决你的问题,请参考以下文章

Apache骆驼优雅的路由关闭

如何修复 PWA 审核中的“当 JavaScript 不可用时不提供后备内容”?

使用适用于 iOS 的 XMPP 框架:当订阅者可用/不可用时接收状态

Android WifiP2p - 当发现的设备不可用时收到通知

如何在出现之前过滤ios推送通知

当原始存储库不可用时,是不是可以将默认存储库添加到 SLES?