JMS中如何从Consumer获取Queue?是否存在对应方法?
能否从JMS Consumer中获取关联的Queue?
标准JMS API的MessageConsumer接口并没有提供直接获取其关联Queue的方法,这是JMS规范的设计决定——Consumer仅负责消息消费,API并未暴露其绑定的目标资源(Queue)。
可行的解决方案
自行保存Queue引用
创建Consumer时必然需要传入对应的Queue对象,直接将这个对象存入类变量中,后续需要使用时直接调用即可,这是最通用、符合规范的做法:private Queue targetQueue; private MessageConsumer consumer; public void initConsumer() throws NamingException, JMSException { targetQueue = (Queue) initialContext.lookup("dynamicQueues/TestQueue"); consumer = queueSession.createConsumer(targetQueue); } // 需要使用Queue时直接调用该方法 public Queue getConsumerBoundQueue() { return targetQueue; }依赖JMS厂商扩展(不推荐跨环境使用)
部分JMS提供商(如ActiveMQ、IBM MQ)的实现类扩展了标准接口,提供了获取目标资源的方法。比如ActiveMQ的ActiveMQMessageConsumer有getDestination()方法,可强转后获取Queue,但这种写法绑定特定厂商,兼容性差:// 仅适用于ActiveMQ环境 if (consumer instanceof ActiveMQMessageConsumer) { Queue boundQueue = (Queue) ((ActiveMQMessageConsumer) consumer).getDestination(); System.out.println(boundQueue.getQueueName()); }
内容的提问来源于stack exchange,提问作者user21871375
相关产品推荐
相关产品推荐

