Spring消息侦听器名称

时间:2015-07-06 03:15:31

标签: spring jms listener

我创建了几个spring 4.1.6 @JmsListener方法,用于从队列接收消息。我想获取管理员名称的监听器名称列表:

    @JmsListener(
        destination = "${jms.destination.name}"
        , containerFactory = "myJmsContainerFactory"
        , id ="myListener")
    public void receiveMessage(String message) {
        System.out.println("Received <" + message + ">");
    }

我希望显示监听器的id / name以用于管理目的。我可以使用JmsListenerEndpointRegistry停止并启动监听器,但无法查看如何获取特定侦听器的名称。

    JmsListenerEndpointRegistry registry = context.getBean(org.springframework.jms.config.JmsListenerEndpointRegistry.class);

    Collection<MessageListenerContainer> listeners = registry.getListenerContainers();
    MessageListenerContainer mlc = registry.getListenerContainer("myListener");
    System.out.println("Running" + mlc.isRunning());

    mlc.stop();

在调试中,Collection可以看作是Collections $ UnmodifiableCollection,其LinkedHashMap具有侦听器id,在本例中为myListener,作为LinkedHashMap的键值

1 个答案:

答案 0 :(得分:1)

这个问题很老了,但我这样解决了:

Set<String> listenerContainerIds = registry.getListenerContainerIds();
for (String id : listenerContainerIds) {
    MessageListenerContainer listenerContainer = registry.getListenerContainer(id);
    ...
}

我通过getListenerContainerIds获得了对MessageListenerContainer的引用,我得到了引用ID的名称。

希望这会有所帮助......