我正在开发Spring Boot应用程序,它必须使用不同的端口甚至ip地址连接到多个WebSphere JMS连接。我需要接收和发送消息到不同的队列。
我从这个来源举了一个连接的例子-
https://github.com/lzp4ever/IBM_WebSphere_MQ_弹簧_启动_JMS
但是当我添加第二次connectionFactory Spring Boot失败时,它就是不知道该使用哪一次。
我的问题是,我应该如何配置我的配置文件来侦听多个队列?将SpringBoot应用程序连接到几个不同的JMS服务器上是个好主意吗?
【玩转 GPU】有奖征文
精美礼品等你拿!
我只是复制并粘贴相同的Bean(就像上面的git链接),然后添加Bean(name)来分隔它们。它不工作,然后我将新JmsListenerContainerFactory bean添加到我的每个配置文件中。
我的一个配置文件是:
@Bean(name = "mqQueueConnectionFactory2") public MQQueueConnectionFactory mqQueueConnectionFactory2() { MQQueueConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory(); mqQueueConnectionFactory.setHostName(host); try { mqQueueConnectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT); mqQueueConnectionFactory.setCCSID(1208); mqQueueConnectionFactory.setChannel(channel); mqQueueConnectionFactory.setPort(port); mqQueueConnectionFactory.setQueueManager(queueManager); } catch (Exception e) { logger.error("MQQueueConnectionFactory bean exception", e); return mqQueueConnectionFactory; @Bean(name = "userCredentialsConnectionFactoryAdapter2") UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter2(@Qualifier("mqQueueConnectionFactory2") MQQueueConnectionFactory mqQueueConnectionFactory) { UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter(); userCredentialsConnectionFactoryAdapter.setUsername(username); userCredentialsConnectionFactoryAdapter.setPassword(password); userCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(mqQueueConnectionFactory); return userCredentialsConnectionFactoryAdapter; @Bean(name = "cachingConnectionFactory2") //@Primary public CachingConnectionFactory cachingConnectionFactory2(@Qualifier("userCredentialsConnectionFactoryAdapter2") UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter) { CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(); cachingConnectionFactory.setTargetConnectionFactory(userCredentialsConnectionFactoryAdapter); cachingConnectionFactory.setSessionCacheSize(500); cachingConnectionFactory.setReconnectOnException(true); return cachingConnectionFactory; @Bean(name = "jmsTransactionManager2") public PlatformTransactionManager jmsTransactionManager2(@Qualifier("cachingConnectionFactory2") CachingConnectionFactory cachingConnectionFactory) { JmsTransactionManager jmsTransactionManager = new JmsTransactionManager(); jmsTransactionManager.setConnectionFactory(cachingConnectionFactory); return jmsTransactionManager; @Bean(name = "jmsOperations2") public JmsOperations jmsOperations2(@Qualifier("cachingConnectionFactory2") CachingConnectionFactory cachingConnectionFactory) { JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory); jmsTemplate.setReceiveTimeout(receiveTimeout); return jmsTemplate; @Bean public JmsListenerContainerFactory myFactory2(@Qualifier("cachingConnectionFactory2") CachingConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); // This provides all boot's default to this factory, including the message converter configurer.configure(factory, connectionFactory); // You could still override some of Boot's default if necessary. return factory; }
然后,我将我的发送者代码从以下代码更改为:
@Autowired