WSO2學習筆記(四)

今天又被WSO2的官方文檔坑了一把。

按官網的教程配置WSO2 EI與IBM MQ的集成後,從IBM MQ的queue中取報文沒有遇到問題,然而往queue裏寫報文卻遇到了麻煩。

先上最終配置成功的proxy:

<?xml version="1.0" encoding="UTF-8"?>
<proxy name="MQTest2" startOnLoad="true" transports="http" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <property name="OUT_ONLY" scope="default" type="STRING" value="true"/>
            <header action="remove" name="User-Agent" scope="transport"/>
            <header action="remove" name="Content-Type" scope="transport"/>
            <header action="remove" name="Transfer-Encoding" scope="transport"/>
            <send description="">
                <endpoint>
                    <address uri="jms:/LocalQueue1"/>
                    <property name="transport.jms.DestinationType" value="queue"/>
                    <property name="transport.jms.ConnectionFactoryType" value="queue"/>
                    <property name="java.naming.factory.initial" value="com.sun.jndi.fscontext.RefFSContextFactory"/>
                    <property name="java.naming.provider.url" value="file:///D:/jndidirectory"/>
                    <property name="transport.jms.ConnectionFactoryJNDIName" value="MyQueueConnectionFactory"/>
                </endpoint>
            </send>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </target>
</proxy>
遇到的最大的麻煩在兩處

1. proxy的transport配成“jms"或”http jms",WSO2 ESB一看到jms,就會按axis2.xml裏Receiver的配置去監聽隊列,而因爲此處proxy Send的目標地址也是同一個隊列,就成了死循環,系統log裏會出現無限循環的報錯

2. 官方文檔中沒有提要配置那三個“remove" http header的Mediator,但實際上如果不配置,就會遇到報錯,大意是jms不接受Content-Type,或User-Agent或Transfer-Encoding這個header

不過到這裏發現還有已給問題,就是上有系統會一直在等HTTP返回信息,然而因爲queue的特性,根本不會有返回信息,所以就會報超時錯誤。解決方法是配置FORCE_SC_ACCEPTED表頭,注意scope得是"axis2"而不是"transport"或"synapse",但是配了這個表頭後,發現又得額外"remove"三個HTTP表頭了。最終的proxy配置如下。

<?xml version="1.0" encoding="UTF-8"?>
<proxy name="MQTest2" startOnLoad="true" transports="http" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <property name="OUT_ONLY" scope="default" type="STRING" value="true"/>
            <property name="FORCE_SC_ACCEPTED" scope="axis2" type="STRING" value="true"/>
            <header action="remove" name="Content-Length" scope="transport"/>
            <header action="remove" name="Accept-Language" scope="transport"/>
            <header action="remove" name="Accept-Encoding" scope="transport"/>
            <header action="remove" name="User-Agent" scope="transport"/>
            <header action="remove" name="Content-Type" scope="transport"/>
            <header action="remove" name="Transfer-Encoding" scope="transport"/>
            <send description="">
                <endpoint>
                    <address uri="jms:/LocalQueue1"/>
                    <property name="transport.jms.DestinationType" value="queue"/>
                    <property name="transport.jms.ConnectionFactoryType" value="queue"/>
                    <property name="java.naming.factory.initial" value="com.sun.jndi.fscontext.RefFSContextFactory"/>
                    <property name="java.naming.provider.url" value="file:///D:/jndidirectory"/>
                    <property name="transport.jms.ConnectionFactoryJNDIName" value="MyQueueConnectionFactory"/>
                </endpoint>
            </send>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </target>
</proxy>
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章