1

在 onMessage 方法中是否有可能知道 MessageListener 正在侦听哪个队列?

我的 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 实现中,可能存在多跳队列,例如 WebSphere MQ 中的静态发布/订阅设置,您可以将消息写入一个队列,然后它会围绕一条路由反弹,最终进入一个完全不同的队列。此外,您可能会遇到 ESB 的情况,其中包含路由消息的中间逻辑。在这种情况下,在过度依赖 JMSDestination 属性之前,您需要三思而后行。否则,继续。

于 2012-09-18T06:36:45.297 回答