我有代理侦听消息代理上的JMS队列。当我将消息发送到队列时,我将自定义属性设置为JMS消息。但是当我记录代理收到的消息时,没有自定义的JMS属性。
如何在代理中获得自定义JMS属性?
我将WSO2 ESB 4.6.0与ActiveMQ 5.8.0一起使用。
<proxy xmlns="http://ws.apache.org/ns/synapse" name="MyProxy" transports="https,TTP,http,jms" statistics="disable" trace="disable" startOnLoad="true">
<target>
<inSequence>
<property name="OUT_ONLY" value="true"/>
<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
<log level="full"/>
</inSequence>
<outSequence>
<drop/>
</outSequence>
<endpoint>
<address uri="jms:/MyQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue" format="pox"/>
</endpoint>
</target>
</proxy>
答案 0 :(得分:6)
有必要获取传输头以访问自定义JMS属性。我找到了两种方法:
1)来自XML配置:
<log level="custom">
<property name="jms property" expression="get-property('transport', 'custom_prop_key_1')"/>
</log>
2)来自自定义班级调解员:
public boolean mediate(MessageContext synCtx) {
((Map)((Axis2MessageContext) synCtx).getAxis2MessageContext().getProperty("TRANSPORT_HEADERS")).get("custom_prop_key_1");
...
}
答案 1 :(得分:3)
我不认为它们直接在SOAP消息中可用。它们应该在Axis2 / Transport范围内可用。通常,JMS传输仅将JMS消息的有效负载添加到SOAP主体。所以请尝试以下。
您可以检查他们使用ESB中的属性进行检索并记录它们。
<log level="custom">
<property name="JMS_PROPERTY---->" expression="get-property('axis2','your-property-name')"/>
</log>
您可以在属性范围上引用this。 (如果在传输标题中设置,您可以将范围从'axis2'更改为'transport'并尝试。)
我没有亲自尝试过,并在逻辑上提出答案。