WSO2:为MQ覆盖JMS生产者JNDI属性

问题描述 投票:0回答:2

我想作为文档中列出覆盖JMS连接属性:https://docs.wso2.com/display/EI640/Using+the+ESB+as+a+JMS+Producer

您可以定义在JMS连接URL JMS队列名和连接工厂参数。的连接工厂参数的值取决于JMS代理的类型。

我在axis2.xml文件中定义多个队列连接工厂,以支持多个队列管理器。然而,下面的配置不生效(在消息不发送到正确的队列环境):

<endpoint name="myEndpoint" xmlns="http://ws.apache.org/ns/synapse">
    <address format="pox" uri="jms://MY_QUEUE_NAME?transport.jms.ConnectionFactoryJNDIName=MYQUEUEQCF"/>
</endpoint>

Axis2的构造与上述相匹配:

<transportSender name="jms" class="org.apache.axis2.transport.jms.JMSSender">

<parameter name="myConnectionFactory" locked="false">
        <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.fscontext.RefFSContextFactory</parameter>
        <parameter name="java.naming.provider.url" locked="false">file:bindings</parameter>
        <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">OTHERQCF</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
        <parameter name="transport.jms.UserName" locked="false"></parameter>
        <parameter name="transport.jms.Password" locked="false"></parameter>
</parameter>

<parameter name="secondConnectionFactory" locked="false">
        <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.fscontext.RefFSContextFactory</parameter>
        <parameter name="java.naming.provider.url" locked="false">file:bindings</parameter>
        <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MYQUEUEQCF</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
        <parameter name="transport.jms.UserName" locked="false"></parameter>
        <parameter name="transport.jms.Password" locked="false"></parameter>
</parameter>

</transportSender>

这些消息,而不是通过MYQUEUEQCF经历的第一个连接工厂,OTHERQCF如预期,因此它们被发送到错误的环境。使用的队列技术的WebSphere MQ。

这是一个错误还是我失去了一些东西?

我也曾尝试用下面的配置,它不生效:

<endpoint name="myEndpoint" xmlns="http://ws.apache.org/ns/synapse">
    <address format="pox" uri="jms://MY_QUEUE_NAME?transport.jms.ConnectionFactoryJNDIName=MYQUEUEQCF&amp;java.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory&amp;java.naming.provider.url=file:bindings&amp;transport.jms.DestinationType=queue"/>
</endpoint>
wso2 jms wso2esb wso2ei
2个回答
0
投票

终于找到了解决方案:WSO2文档(如常)不完整的和在这种情况下,不正确的。

首先,第二JMS生产者必须具有CacheLevel上述SESSION(即值设置为自动,消费,或生产者在axis.xml配置,例如:

<parameter name="secondConnectionFactory" locked="false">
    <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.fscontext.RefFSContextFactory</parameter>
    <parameter name="java.naming.provider.url" locked="false">file:bindings</parameter>
    <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MYQUEUEQCF</parameter>
    <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
    <parameter name="transport.jms.UserName" locked="false"></parameter>
    <parameter name="transport.jms.Password" locked="false"></parameter>
    <parameter name="transport.jms.CacheLevel" locked="false">producer</parameter>
</parameter>

这是因为JMSProducer否则将移动到使用基于GitHub上的代码默认连接工厂。

其次重要的是,文档错误地指出参数名。使用的参数称为transport.jms.ConnectionFactory而不是transport.jms.ConnectionFactoryJNDIName。

此外,该参数值指的是连接工厂,即secondConnectionFactory的整体内部的axis2名称在上述的例子,而不是MYQUEUEQCF JNDI名称。

所以具有以下配置,该消息被正确地发送到第二个队列:

<endpoint name="myEndpoint" xmlns="http://ws.apache.org/ns/synapse">
    <address format="pox" uri="jms://MY_QUEUE_NAME?transport.jms.ConnectionFactory=secondConnectionFactory&amp;java.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory&amp;java.naming.provider.url=file:bindings&amp;transport.jms.DestinationType=queue"/>
</endpoint>

-1
投票

不知道是否it's下EI 6.x的相同,但对于ESB 4.8你必须定义第二运输发送女巫,那么你在发送/端点参考。

        <transportSender name="jmsSecond" class="org.apache.axis2.transport.jms.JMSSender">

           <parameter name="secondConnectionFactory" .....

    </transportSender>


<endpoint name="myEndpoint" xmlns="http://ws.apache.org/ns/synapse">
    <address format="pox" uri="jmsSecond://MY_QUEUE_NAME?transport.jms.ConnectionFactoryJNDIName=MYQUEUEQCF"/>
</endpoint>
© www.soinside.com 2019 - 2024. All rights reserved.