【问题标题】:WSO2 ESB: header loss (SamplingProcessor)WSO2 ESB:标头丢失(SamplingProcessor)
【发布时间】:2013-06-04 16:17:17
【问题描述】:

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

我希望在 Proxy_3 中出现 value_1 而不是 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>

消息存储

Store_1 is InMemoryMessageStore

代理_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>

代理_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>

序列_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>

代理_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>

【问题讨论】:

    标签: wso2 wso2esb wso2carbon


    【解决方案1】:

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

    【讨论】:

    • 感谢@Chintana!我是否纠正了该问题以解决我需要在保存到 MessageStore 之前将 Transport 属性放入 SOAP Envelope Header 的问题?
    • 是的,您可以将其作为 SOAP 标头元素或负载中的特殊元素。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 2012-04-12
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多