java - DefaultMessageListenerContainer,有关要监听的队列的知识

标签 java spring queue jms spring-jms

是否有可能在 onMessage 方法内部知道 MessageListener 正在监听哪个队列?

我的 Spring 配置(其中一部分):

<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?

    }

}

有没有现成的解决方案?或者任何自定义解决方案来获取队列/目的地名称?

后续批处理中是否需要队列...

最佳答案

简单。至少在微不足道的情况下:

msg.getJMSDestination() 将为您提供 javax.jms.Destination 对象形式的目的地。通常 .toString() 返回类似以下内容:queue://MYQUEUENAME

但是,在某些 JMS 实现中,可能存在多跳队列,例如 WebSphere MQ 中的静态发布/订阅设置,您可以将消息写入一个队列,它会在一条路由中反弹,最终到达一个完全不同的队列。队列。另外,您可能会遇到 ESB 的情况,中间有路由消息的逻辑。在这种情况下,在过度依赖 JMSDestination 属性之前您需要三思而后行。否则,请继续。

关于java - DefaultMessageListenerContainer,有关要监听的队列的知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12471030/

相关文章:

java - 当我使用合并时,Hibernate 会插入而不是更新

java - Spring:如何从属性文件中设置@DateTimeFormat 模式?

java - 队列元素乱序排列,不按顺序排列

python - Tensorflow 队列 - 在训练数据和验证数据之间切换

python - 在 Python 中,如何等待多个队列中的所有项目都被处理?

java - 使用服务模式和使用独立存储库 Spring Data REST 有什么区别?

java - Java程序中的正则表达式查询

java - Springframework 无法解析 Controller 上的配置类

java - 与浏览器相比,Android Web View 非常慢且没有响应 为什么?

java - 如何释放 XSSFWorkbook 占用的内存?