1

メッセージ ブローカーで JMS キューをリッスンするプロキシがあります。メッセージをキューに送信するときに、カスタム プロパティを JMS メッセージに設定します。しかし、プロキシが受信したメッセージをログに記録すると、カスタム JMS プロパティがありません。
プロキシでカスタム JMS プロパティを取得するにはどうすればよいですか?

ActiveMQ 5.8.0 で WSO2 ESB 4.6.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>
4

2 に答える 2

6

カスタム JMS プロパティにアクセスするには、トランスポート ヘッダーを取得する必要があります。そのための2つの方法を見つけました:
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");
...
}
于 2013-05-03T17:01:11.270 に答える
3

SOAP メッセージで直接利用できるとは思いません。これらは Axis2 / Transport スコープで利用できるはずです。通常、JMS トランスポートは、JMS メッセージのペイロードのみを SOAP ボディに追加します。ということで、フォローしてみてください。

ESB のプロパティを使用して取得し、ログに記録することを確認できますか。

<log level="custom">
    <property name="JMS_PROPERTY---->" expression="get-property('axis2','your-property-name')"/>
</log>

これは、プロパティのスコープで参照できます。(Transport headers に設定されている場合は、スコープを「axis2」から「transport」に変更して試すことができます。)

私は個人的にこれを試したり、論理的に答えを提案したりしていません。

于 2013-05-03T16:49:51.860 に答える