如何在 ConnectionFactory 列表上创建 JMS MessageListenerContainer
How to create JMS MessageListenerContainer on a list of ConnectionFactory
以下配置在 ConnectionFactory
.
上创建 MessageListenerContainer
@Configuration
public class MyConfig {
@Bean
public MessageListenerContainer myListenerContainer() {
DefaultMessageListenerContainer messageListenerContainer = new DefaultMessageListenerContainer();
messageListenerContainer.setConnectionFactory(myConnectionFactory1);
[...]
return messageListenerContainer;
}
}
我想创建与 MessageListenerContainer
相同的配置,但有不同的配置 ConnectionFactory
(指向不同的队列管理器)。
我已经尝试 return MessageListenerContainer
的列表(MessageListenerContainer[]
或 List<MessageListenerContainer>
有或没有 @Qualifier
)但新消息被忽略.
如何管理 ConnectionFactory
列表中的 MessageListenerContainer
创建?
还有另一种创建多个 MessageListenerContainer
的方法,而不是创建 MessageListenerContainer
,而是创建多个 JmsListenerContainerFactory
并在 JmsListener
中设置 bean 名称。
@EnableJms
class JmsConfiguration{
Bean
public JmsListenerContainerFactory jmsListenerContainerFactory(){
// create jms listener
}
@Bean
public JmsListenerContainerFactory jmsListenerContainerFactory2(){
// create jms listener
}
}
这里创建了两个工厂bean,jmsListenerContainerFactory
和jmsListenerContainerFactory2
,现在您可以在JmsListener
中使用这些工厂bean来表示要使用哪个bean。
@Component
class JmsListeners {
@JmsListener(containerFactory="jmsListenerContainerFactory")
public void onMessage(...){
}
@JmsListener(containerFactory="jmsListenerContainerFactory2")
public void onMessage2(...){
}
}
您可以使用应用程序上下文动态注册 bean。
@Component
class Configurer {
Configurer (GenericApplicationContext context) {
for (i = 0; ...) {
ConnectionFactory cf = ...
context.registerBean("cf" + i, ConnectionFactory.class, () -> cf);
context.getBean("cf" + i); // to initialize it
DefaultMessageListenerContainer container = ...
context.registerBean("container" + i, ...);
context.getBean("container" + i, ...
}
}
}
以下配置在 ConnectionFactory
.
MessageListenerContainer
@Configuration
public class MyConfig {
@Bean
public MessageListenerContainer myListenerContainer() {
DefaultMessageListenerContainer messageListenerContainer = new DefaultMessageListenerContainer();
messageListenerContainer.setConnectionFactory(myConnectionFactory1);
[...]
return messageListenerContainer;
}
}
我想创建与 MessageListenerContainer
相同的配置,但有不同的配置 ConnectionFactory
(指向不同的队列管理器)。
我已经尝试 return MessageListenerContainer
的列表(MessageListenerContainer[]
或 List<MessageListenerContainer>
有或没有 @Qualifier
)但新消息被忽略.
如何管理 ConnectionFactory
列表中的 MessageListenerContainer
创建?
还有另一种创建多个 MessageListenerContainer
的方法,而不是创建 MessageListenerContainer
,而是创建多个 JmsListenerContainerFactory
并在 JmsListener
中设置 bean 名称。
@EnableJms
class JmsConfiguration{
Bean
public JmsListenerContainerFactory jmsListenerContainerFactory(){
// create jms listener
}
@Bean
public JmsListenerContainerFactory jmsListenerContainerFactory2(){
// create jms listener
}
}
这里创建了两个工厂bean,jmsListenerContainerFactory
和jmsListenerContainerFactory2
,现在您可以在JmsListener
中使用这些工厂bean来表示要使用哪个bean。
@Component
class JmsListeners {
@JmsListener(containerFactory="jmsListenerContainerFactory")
public void onMessage(...){
}
@JmsListener(containerFactory="jmsListenerContainerFactory2")
public void onMessage2(...){
}
}
您可以使用应用程序上下文动态注册 bean。
@Component
class Configurer {
Configurer (GenericApplicationContext context) {
for (i = 0; ...) {
ConnectionFactory cf = ...
context.registerBean("cf" + i, ConnectionFactory.class, () -> cf);
context.getBean("cf" + i); // to initialize it
DefaultMessageListenerContainer container = ...
context.registerBean("container" + i, ...);
context.getBean("container" + i, ...
}
}
}