【问题标题】:WSO2 ESB using jms failover into recipient listWSO2 ESB 使用 jms 故障转移到收件人列表
【发布时间】:2017-05-17 23:28:01
【问题描述】:

我正在尝试使用收件人列表发送到多个 JMS 端点。我使用 ActiveMQ 作为消息代理。我的问题是:无论我将 URL 设置为 ActiveMQ 的单个节点,当我设置故障转移端点逗号分隔时它都能正常工作,我只是知道它会在故障转移 URL 中拆分逗号。有没有办法可以在故障转移中跳过这种逗号字符拆分?

这行得通:

jms:/myQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://myIP:61616&transport.jms.DestinationType=queue

但这不起作用,因为它会拆分逗号。

jms:/myQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=failover:(tcp://myIP:61616,tcp://myIP2:61616)&transport.jms.DestinationType=queue

在我的例子中,我将上面的多个 uri 与 ',' 连接起来,以使接收者列表工作,但故障转移中的逗号使其失败。

有解决办法吗?

谢谢,

安东尼奥

【问题讨论】:

    标签: wso2 wso2esb synapse


    【解决方案1】:

    您可以尝试如下代替逗号

    <send>
     <endpoint key="jmsMBendpoint1"/>
    </send>
    <send>
     <endpoint key="jmsMBendpoint2"/>
    </send>
    

    或者您可以使用Recipienlist endpoint 将一条消息发送到多个端点。在将收件人列表存储为 localentry 并将其提供为端点密钥之后。

    更多 WSO2 ESB send to multiple endpoints

    【讨论】:

    • 嗨,在这种情况下,我使用的是在运行时计算的动态端点,我已经使用收件人列表进行发送,所以我不能使用多个发送,因为在应用程序执行之前我什至不知道如何我应该使用许多发送。我已经检查了文档和代码,但无法为我的问题找到答案。感谢您的回复!
    【解决方案2】:

    我不知道收件人列表的解决方法是什么,但满足您需求的另一种方法是:

    <property name="EIP_LIST" type="OM">
        <list xmlns="">
            <epr>jms:/myQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=failover:(tcp://myIP:61616,tcp://myIP2:61616)&amp;transport.jms.DestinationType=queue</epr>
            <epr>jms:/myQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=failover:(tcp://myIP3:61616,tcp://myIP4:61616)&amp;transport.jms.DestinationType=queue</epr>
        </list>
    </property>
    <iterate expression="$ctx:EIP_LIST//epr">
        <target>
            <sequence>
                <header name="To" expression="$body/epr"/>
                <send/>
            </sequence>
        </target>
    </iterate>      
    

    你只需要动态组合 EIP_LIST 的内容

    【讨论】:

    • 我可能会选择这个解决方案。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多