我正在尝试使用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>
答案 0 :(得分:3)
传输属性作为HTTP标头传递。但是,当您将消息存储在队列中时,它仅存储消息有效内容中可用的内容,并将内容类型设置为XML。在将消息保存到队列时,没有标准方法可以保留所有自定义HTTP标头信息。您必须考虑这些额外的标头来增强现有的消息存储/处理器实现。但是,更容易的解决方案是在将消息存储到队列之前使用enrich mediator将头值设置为消息中的payload元素。然后从您的代理发送之前,提取它并创建自定义标题并发送。
答案 1 :(得分:2)
正如chintana所说,如果使用ESB 4.6.0或4.7.0,则必须将其添加到有效负载中。但是我们已经解决了这个问题,以便在我们将消息存储在商店中时保留标头值。它将伴随下一个版本。