0

我们一直在测试 wso2 esb 上的消息处理器和队列。我们一直在非常成功地使用采样处理器将数据记录到数据库中。这个 POX 端到端。采样处理器正确地将消息出列并将其发送到端点。端点被定义为 POX 和非分块,这一切都很好。

我们决定尝试存储转发处理器,因为我们想测试有保证的交付机制。所以我们创建了一个新的处理器并将其定义为存储和转发。在存储消息的主序列中,我们在存储消息之前添加了 target.endpoint 属性。该属性设置为采样场景中使用的同一端点。

但是 - 发现在这种模式下,消息转换不会正确发生。内容类型设置为 text/html 并且输出是分块的。这会导致我们的服务返回 415 错误。

我们已经尝试将 messageType、contentType 等添加到多个位置、轴 http 发送方传输等,但似乎根本没有区别。

对此的任何指导将不胜感激

4

2 回答 2

0

下面的 JS 代码只是将 messageID 插入到调用者的返回负载中。将其与仅发送到同一端点的采样处理器和序列一起使用可以正常工作。

    <?xml version="1.0" encoding="UTF-8"?>
    <definitions xmlns="http://ws.apache.org/ns/synapse">
        <registry provider="org.wso2.carbon.mediation.registry.WSO2Registry">
            <parameter name="cachableDuration">15000</parameter>
        </registry>

        <endpoint name="test_e">
            <address uri="http://192.168.45.168:8080/cgi-bin/esbcgi.pl" format="pox"/>
            <property name="DISABLE_CHUNKING" value="true" scope="axis2"/>
        </endpoint>

        <sequence name="fault" trace="enable">
            <log level="full">
                <property name="MESSAGE" value="Executing default 'fault' sequence"/>
                <property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
                <property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
            </log>
            <drop/>
        </sequence>

        <sequence name="main" onError="fault" trace="enable">
            <in>
                <log level="full"/>
                <property name="OUT_ONLY" value="true"/>
                <property name="FORCE_HTTP_1.0" value="true" scope="axis2"/>
                <script language="js">
                var message = mc.getMessageID(); 
                var messageId = message.substring(9,45); 
                var payload = mc.getPayloadXML().*; 
                mc.setPayloadXML(                                                                                                                                                               
                &lt;payload&gt;                                                                                                                                                          &lt;messageId&gt;{messageId}&lt;/messageId&gt;{payload}                                                                                                                  
                &lt;/payload&gt;);
                </script>

                <switch xmlns:ns="http://org.apache.synapse/xsd" xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:ns3="http://org.apache.synapse/xsd" source="get-property('To')">

                    <case regex=".*/TEST/.*">
                        <property name="target.endpoint" value="test_e" scope="default"/>
                        <store messageStore="TEST"/>
                    </case>
                    <default/>
                </switch>

                <property name="OUT_ONLY" value="false"/>
                <script language="js">var serviceMessageId = mc.getMessageID();
                mc.setPayloadXML(                                                                                                                                                        
                   &lt;tag xmlns="http://tagcmd.com"&gt;        
                   &lt;messageId&gt;{serviceMessageId}&lt;/messageId&gt;                                                                                                                 &lt;/tag&gt;);
                </script>

                <send>
                    <endpoint key="MessageService"/>
                </send>
            </in>

            <out>
                <script language="js">
                var messagePayload= mc.getPayloadXML().*.*;         
                mc.setPayloadXML(                                                                                                                                                        
                &lt;eventResponse&gt;                                                                                                                                                    &lt;messageId&gt;{messagePayload}&lt;/messageId&gt;                                                                                                                      &lt;/eventResponse&gt;);
                </script>
                <send/>
            </out>

            <description>The main sequence for the message mediation</description>
        </sequence>


        <messageStore class="org.wso2.carbon.message.store.persistence.jms.JMSMessageStore" name="TEST">
            <parameter name="java.naming.factory.initial">org.apache.qpid.jndi.PropertiesFileInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url">repository/conf/jndi.properties</parameter>
            <parameter name="store.jms.destination">APP8</parameter>
        </messageStore>


        <messageProcessor class="org.apache.synapse.message.processors.forward.ScheduledMessageForwardingProcessor" name="test_p2" messageStore="TEST">
            <parameter name="max.deliver.attempts">1</parameter>
        </messageProcessor>

    </definitions>
于 2012-10-03T11:22:55.300 回答
0

在发送到端点之前,在序列中定义以下属性

<property name="DISABLE_CHUNKING" value="true" scope="axis2"/>
于 2012-10-03T09:02:36.750 回答