WSO2 ESB:报头丢失(SamplingProcessor)

时间:2013-06-04 16:17:18

标签: wso2 wso2esb wso2carbon

我正在尝试使用MessageProcessor通过WSO2 ESB 4.6.0发送消息:
的Proxy->代理(存储) - >处理器 - >序列 - >代理
我在代理#1中设置了一个属性('transport'范围),将其发送到代理#2,我可以成功记录它,但后来我通过采样处理器将消息传递给代理#3并且属性迷路了 这是一个错误吗?如何通过处理器发送“运输”财产?

我希望value_1在Proxy_3中显示而不是null


<messageProcessor name="Processor_1" class="org.apache.synapse.message.processors.sampler.SamplingProcessor" messageStore="Store_1" xmlns="http://ws.apache.org/ns/synapse">
   <parameter name="interval">1000</parameter>
   <parameter name="sequence">Sequence_1</parameter>
</messageProcessor>

MessageStore

Store_1 is InMemoryMessageStore

Proxy_1

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Proxy_1" transports="jms" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <property name="my_property_1" value="value_1" scope="transport"/>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
      <faultSequence/>
      <endpoint>
         <address uri="http://localhost:8280/services/Proxy_2" format="soap11" />
      </endpoint>
   </target>
   <parameter name="transport.jms.Destination">Queue</parameter>
</proxy>

Proxy_2

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Proxy_2" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <property name="preserveProcessedHeaders" value="true"/>
         <log level="custom" separator=",">
            <property name="my_property_1" expression="get-property('transport', 'my_property_1')"/>
         </log>
         <store messageStore="Store_1"/>
      </inSequence>
   </target>
</proxy>

Sequence_1

<sequence xmlns="http://ws.apache.org/ns/synapse" name="Sequence_1">
   <send>
      <endpoint>
         <address uri="http://localhost:8280/services/Proxy_3" format="soap11"/>
      </endpoint>
   </send>
</sequence>

Proxy_3

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Proxy_3" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <log level="custom">            
            <property name="my_property_1" expression="get-property('transport', 'my_property_1')"/>
         </log>
         <send/>
      </inSequence>
   </target>
</proxy>

2 个答案:

答案 0 :(得分:3)

传输属性作为HTTP标头传递。但是,当您将消息存储在队列中时,它仅存储消息有效内容中可用的内容,并将内容类型设置为XML。在将消息保存到队列时,没有标准方法可以保留所有自定义HTTP标头信息。您必须考虑这些额外的标头来增强现有的消息存储/处理器实现。但是,更容易的解决方案是在将消息存储到队列之前使用enrich mediator将头值设置为消息中的payload元素。然后从您的代理发送之前,提取它并创建自定义标题并发送。

答案 1 :(得分:2)

正如chintana所说,如果使用ESB 4.6.0或4.7.0,则必须将其添加到有效负载中。但是我们已经解决了这个问题,以便在我们将消息存储在商店中时保留标头值。它将伴随下一个版本。