1

MessageListenerがリッスンしているキューをonMessageメソッド内で知る可能性はありますか?

私のSpring-config(その一部):

<bean id="abstractMessageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer" abstract="true">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="maxConcurrentConsumers" value="5"/>
    <property name="receiveTimeout" value="10000" />
</bean>

<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer" parent="abstractMessageListenerContainer">
    <property name="destinationName" value="MY.QUEUE" />
    <property name="messageListener" ref="myMessageListener" />
</bean>

<bean id="myMessageListener" class="my.package.structure.ListenerClass"></bean>

私のリスナークラス:

public class ListenerClass implements MessageListener {


    public void onMessage(Message msg) {

    //where do I know from, on which queue the message has been written to?

    }

}

すぐに使えるソリューションはありますか?または、キュー/宛先名を取得するためのカスタムソリューションはありますか?

後続のバッチ処理でキューが必要ですか...

4

1 に答える 1

3

簡単。些細なケースでは、少なくとも:

msg.getJMSDestination()宛先を javax.jms.Destination オブジェクトとして提供します。通常.toString()、次のようなものが返されます。queue://MYQUEUENAME

ただし、一部の JMS 実装では、メッセージを 1 つのキューに書き込む可能性がある WebSphere MQ の静的 pub/sub セットアップなどのマルチホップ キューが存在する場合があり、それはルートを跳ね返って完全に異なるキューに到達します。また、メッセージをルーティングするロジックが途中にある ESB の場合もあります。このような場合、JMSDestination 属性に頼る前によく考える必要があります。それ以外の場合は、先に進んでください。

于 2012-09-18T06:36:45.297 に答える