2015-11-01 57 views
2

在我的應用程序中,我有2個差異mq conn factory beans。爲此我有兩個不同的DefaultJmslistenercontainerfactory beans ex cf1 n cf2。每個DefaultJmslistenercontainerfactory bean都在單獨的@JmsListener中被引用。 ..現在我想開始以編程方式停止每個listrner,因爲我重寫了configureMessageListeners(JmsListenerRegistrar)方法,我可以在其中設置DefaultJmslistenercontainerfactory實例。注意我只能設置一個實例。 然後在我的代碼中,我得到Jm​​sListenerRegistry的spring實例,從中我可以得到列表dmlc..which我可以開始n停止 但是。 。因爲我只設置了一個DefaultJmslistenercontainerfactory實例,所以我的代碼只返回一個dmlc .. 這裏的問題是如何在configureJmsListener()方法中傳遞多個DefaultJmslistenercontainerfactory實例? 注 - 我不手動創建dmlc ..我只是配置了工廠..配置多個DefaultJmslistenercontainerfactory

回答

4

爲什麼使用configureMessageListeners()?這是用於編程端點註冊,不影響@JmsListener的配置。

顯示您的配置(編輯問題,不要嘗試在註釋中張貼代碼/配置)

這工作得很好,我...

@Bean 
public JmsListenerContainerFactory<DefaultMessageListenerContainer> one(
     @Qualifier("jmsConnectionFactory1") ConnectionFactory cf) { 
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); 
    factory.setConnectionFactory(cf); 
    return factory; 
} 

@Bean 
public JmsListenerContainerFactory<DefaultMessageListenerContainer> two(
     @Qualifier("jmsConnectionFactory2") ConnectionFactory cf) { 
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); 
    factory.setConnectionFactory(cf); 
    return factory; 
} 

@JmsListener(id="fooListener", destination="foo", containerFactory="one") 
public void listen1(String payload) { 
    System.out.println(payload + "foo"); 
} 

@JmsListener(id="barListener", destination="bar", containerFactory="two") 
public void listen2(String payload) { 
    System.out.println(payload + "bar"); 
} 

...

@Autowired 
JmsListenerEndpointRegistry registry; 

...

MessageListenerContainer fooContainer = registry.getListenerContainer("fooListener"); 
MessageListenerContainer barContainer = registry.getListenerContainer("barListener"); 

您還可以使用registry.getListenerContainers()得到一個集合。

我以爲我在my answer to your other question解釋了所有這一切。

+0

是的,得到了​​你的答案。我認爲它會爲不同的DefaultJmsListenerContainerFactory實例創建多個註冊表。有什麼辦法可以動態地獲取聽衆的ID嗎?我想在屏幕上顯示偵聽器的ID及其運行狀態。 MessageListenerContainer沒有提供API。 – user3534483

+0

目前還沒有API來獲取偵聽器容器ID列表。 我打開了一個可以跟蹤的[JIRA問題](https://jira.spring.io/browse/SPR-13633)。 –

+0

感謝您的幫助 – user3534483