首页 文章

传输Sender&Receiver JMS的正确配置?

提问于
浏览
1

我有一些问题,因为文件不清楚..

我应该如何设置WSO2 ESB环境以便能够从WSO2 MessageBroker读取和写入消息 .

我跟着ConfigurewithWSO2MessageBroker

  • 我在同一台服务器上有ESB和MB(MB有Offset = 2)/repository/conf/axis2/axis2.xml

....

<transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
        <parameter name="JMSTopic" locked="false">
           <parameter name="java.naming.factory.initial" locked="false">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter>
            <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">TopicConnectionFactory</parameter>
            <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>
        </parameter>

        <parameter name="JMSQueue" locked="false">
            <parameter name="java.naming.factory.initial" locked="false">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter>
            <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
           <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
        </parameter>

        <parameter name="default" locked="false">
            <parameter name="java.naming.factory.initial" locked="false">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter>
            <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
            <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
        </parameter>
    </transportReceiver>

...

和发件人部分

<transportSender name="jms" class="org.apache.axis2.transport.jms.JMSSender">    
      <parameter name="default" locked="false">
                 <parameter name="java.naming.factory.initial" locked="false">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter>
                 <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter>
                 <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">ConnectionFactory</parameter>
          </parameter>        
     </transportSender>

jndi.properties文件

connectionfactory.QueueConnectionFactory = amqp://admin:admin@clientID/carbon?brokerlist='tcp://gst-esb-qa-01:5674'
connectionfactory.TopicConnectionFactory = amqp://admin:admin@clientID/carbon?brokerlist='tcp://gst-esb-qa-01:5674'
connectionfactory.ConnectionFactory      = amqp://admin:admin@clientID/carbon?brokerlist='tcp://gst-esb-qa-01:5674'

queue.myQueue = myQueue
queue.testQueue= testQueue

topic.MyTopic = MyTopic

我的代理人

<proxy name="SendMessagetoJMSProxy" transports="http" startOnLoad="true">
                  <target>
                     <endpoint>
                        <address uri="jms:/myQueue?&amp;transport.jms.DestinationType=queue"/>
                     </endpoint>
                     <inSequence>
                        <log level="custom">
                           <property name="STATE" value="message is sent to queue"/>
                        </log>
                        <property name="OUT_ONLY" value="true"/>
                        <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
                     </inSequence>
                     <outSequence/>
                  </target>
               </proxy>

我的SOAP UI调用

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.samples" xmlns:xsd="http://services.samples/xsd">
                   <soapenv:Header/>
                   <soapenv:Body>
                      <ser:dummy>
                            <xsd:symbol>IBM</xsd:symbol>
                      </ser:dummy>
                   </soapenv:Body>
                </soapenv:Envelope>

根据文档,我应该看到JMS Message Broker中的消息,但我得到了

构建Passthrough流时出错

TID [-1234] [ESB] [2017-05-16 12:52:47,137] ERROR - 构建Passthrough流org.apache.axiom.om时出错 . impl.builder.StAXOMBuilder.lookahead(StAXOMBuilder.java:711)org.apache.axiom.soap.impl.llom.SOAPBodyImpl.hasLookahead(SOAPBodyImpl.java:191)org.apache.axiom.soap.impl.llom.SOAPBodyImpl . getFirstElementLocalName(SOAPBodyImpl.java:217)org.apache.axiom.soap.impl.llom.SOAPBodyImpl.hasFault(SOAPBodyImpl.java:99)org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.hasFault(SOAPEnvelopeImpl.java: 305)org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:189)org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:137)org.apache . synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:100)org.apache.synapse.mediators.AbstractListMediator.buildMessage(AbstractListMediator.java:140)org.apache.synapse.mediators.AbstractListMediator.media te(AbstractListMediator.java:83)org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59)org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)org.apache . synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:210)org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker . java:403)org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:151)org.apache.axis2.transport.base.threads.NativeWorkerPool $ 1.run(NativeWorkerPool.java:172)java.util .concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)java.lang.Thread.run(Thread.java:745)

endpoints :地址为jms的AnonymousEndpoint:/ myQueue?&transport.jms.DestinationType = queue将被标记为SUSPENDED,因为它失败

243402 axis2.xml中的java.naming.provider.url参数是否相对于[ESB Home]位置?

我的案例服务器文件夹结构看起来像...
enter image description here

也许应该看起来像...... ????

<parameter name="java.naming.provider.url" locked="false">file:/home/wso2admin/wso2esb-5.0.0/repository/conf/jndi.properties</parameter>

SECOND : 是与Message Builder和Formater相关的错误????

任何帮助都会很好......我坚持了几天......

3 回答

  • 1

    First Question :axis2.xml中的java.naming.provider.url param是否相对于[ESB Home]位置?

    不,您不需要添加ESB家庭位置 .

    Second Question :这个错误与Message Builder和Formater有关????

    是的,您收到消息构建器时出错 .

    只需验证您是否添加了客户端jar并验证您的代理 . 请创建一个代理如下并尝试 .

    示例代理:

    <proxy name="QueueProxy" startOnLoad="true" transports="jms">
        <target>
            <inSequence>
                 <property name="OUT_ONLY" value="true"/>
                 <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
                <send>
                    <endpoint>
                        <address uri="jms:/MyQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.wso2.andes.jndi.PropertiesFileInitialContextFactory&amp;java.naming.provider.url=repository/conf/jndi.properties"/>
                    </endpoint>
                </send>
            </inSequence>
        </target>
    </proxy>
    

    参考:https://docs.wso2.com/display/ESB500/ESB+as+a+JMS+Producer

  • 1

    请尝试以下代理并检查您使用的URL格式

    <proxy xmlns="http://ws.apache.org/ns/synapse" name="StockQuoteProxy" transports="http">
    <target>
        <inSequence>
            <property action="set" name="OUT_ONLY" value="true"/>
            <send>
                <endpoint>
                    <address uri="jms:/myQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue"/>
                </endpoint>
            </send>
        </inSequence>
        <outSequence>
            <send/>
        </outSequence>
    </target>
    <publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_1.wsdl"/>
    

    更多

  • 2

    感谢Rajjaz和Jan ......

    我创建了一个代理

    <?xml version="1.0" encoding="UTF-8"?>
    <proxy xmlns="http://ws.apache.org/ns/synapse"
           name="SendMessagetoJMSProxy"
           startOnLoad="true"
           statistics="disable"
           trace="disable"
           transports="http,https">
       <target>
          <inSequence>
             <log level="custom">
                <property name="STATE" value="message is sent to myQueue"/>
             </log>
             <property name="OUT_ONLY" value="true"/>
             <property name="FORCE_SC_ACCEPTED" scope="axis2" value="true"/>
          </inSequence>
          <outSequence/>
          <endpoint>
             <address uri="jms:/myQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.wso2.andes.jndi.PropertiesFileInitialContextFactory&amp;java.naming.provider.url=repository/conf/jndi.properties"/>
          </endpoint>
       </target>
       <description/>
    </proxy>
    

    我还想知道如果你在axis2.xml中为transportReceiver定义了默认的JMS配置部分就足以放入Queue的名字了

    所以这也有效

    <?xml version="1.0" encoding="UTF-8"?>
    <proxy xmlns="http://ws.apache.org/ns/synapse"
           name="SendMessagetoJMSProxy2"
           startOnLoad="true"
           statistics="disable"
           trace="disable"
           transports="http,https">
       <target>
          <inSequence>
             <log level="custom">
                <property name="STATE" value="message is sent to GST_TMS_ASSOCIATE_LEASE Queue"/>
             </log>
             <property name="OUT_ONLY" value="true"/>
             <property name="FORCE_SC_ACCEPTED" scope="axis2" value="true"/>
          </inSequence>
          <outSequence/>
          <endpoint>
             <address uri="jms:/myQueue"/>
          </endpoint>
       </target>
       <description/>
    </proxy>
    

    现在我可以使用代理发布消息到JMS队列...

    我很困惑(仍然)所有这些登录系统日志的来源和原因?!?
    ![enter image description here
    ] 1

相关问题