maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-spring</artifactId>
</dependency>
配置项
package com.demo;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.core.JmsTemplate;
import javax.jms.ConnectionFactory;
/**
* <p>
* <code>ActiveMqConfig</code>
* </p>
* Description:
*/
@EnableJms
@Configuration
public class ActiveMqConfig {
@Value("${mq1.brokerURL}")
private String mqOneBrokerUrl;
@Value("${mq1.userName}")
private String mqOneUserName;
@Value("${mq1.password}")
private String mqOnePassword;
@Value("${mq2.brokerURL}")
private String mqTwoBrokerUrl;
@Value("${mq2.userName}")
private String mqTwoUserName;
@Value("${mq2.password}")
private String mqTwoPassword;
@Bean(name = "oneConnectionFactory")
public ConnectionFactory oneConnectionFactory() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(mqOneBrokerUrl);
connectionFactory.setUserName(mqOneUserName);
connectionFactory.setPassword(mqOnePassword);
return connectionFactory;
}
@Bean(name = "oneJmsTemplate")
public JmsTemplate oneJmsTemplate(@Qualifier("oneConnectionFactory") ConnectionFactory oneConnectionFactory) {
JmsTemplate template = new JmsTemplate();
template.setConnectionFactory(oneConnectionFactory);
return template;
}
@Bean(name = "oneMessageListenerContainer")
public DefaultJmsListenerContainerFactory oneMessageListenerContainer(
@Qualifier("oneConnectionFactory") ConnectionFactory oneConnectionFactory) {
DefaultJmsListenerContainerFactory listenerContainer = new DefaultJmsListenerContainerFactory();
listenerContainer.setConnectionFactory(oneConnectionFactory);
return listenerContainer;
}
@Bean(name = "twoConnectionFactory")
public ConnectionFactory twoConnectionFactory() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(mqTwoBrokerUrl);
connectionFactory.setUserName(mqTwoUserName);
connectionFactory.setPassword(mqTwoPassword);
return connectionFactory;
}
@Bean(name = "twoJmsTemplate")
public JmsTemplate twoJmsTemplate(@Qualifier("twoConnectionFactory") ConnectionFactory twoConnectionFactory) {
JmsTemplate template = new JmsTemplate();
template.setConnectionFactory(twoConnectionFactory);
return template;
}
@Bean(name = "twoMessageListenerContainer")
public DefaultJmsListenerContainerFactory twoMessageListenerContainer(
@Qualifier("twoConnectionFactory") ConnectionFactory twoConnectionFactory) {
DefaultJmsListenerContainerFactory listenerContainer = new DefaultJmsListenerContainerFactory();
listenerContainer.setConnectionFactory(twoConnectionFactory);
return listenerContainer;
}
}
发送端
@Autowired
@Qualifier("oneJmsTemplate")
private JmsTemplate oneJmsTemplate;
@Autowired
@Qualifier("twoJmsTemplate")
private JmsTemplate twoJmsTemplate;
public void sendMessageToMqOne(String destinationName, String message) {
oneJmsTemplate.send(destinationName, session -> session.createTextMessage(message));
}
public void sendMessageToMqTwo(String destinationName, String message) {
twoJmsTemplate.send(destinationName, session -> session.createTextMessage(message));
}
消费端
package com.listener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
/**
* <p>
* <code>ConsumerListener </code>
* </p>
* Description: mq监听
*
*/
@Slf4j
@Component
public class ConsumerListener {
/**
* 监听消费MQ队列中的消息
*/
@JmsListener(containerFactory = "oneMessageListenerContainer", destination = "oneDestination")
public void oneListenQueue(String msgText) {
// 进行业务处理
}
/**
* 监听消费MQ队列中的消息
*/
@JmsListener(containerFactory = "twoMessageListenerContainer", destination = "twoDestination")
public void twoListenQueue(String msgText) {
// 进行业务处理
}
}
配置项示例
mq1.brokerURL = failover:(tcp://xxx:61616,tcp://xxx:61617)?jms.prefetchPolicy.queuePrefetch=50&jms.redeliveryPolicy.maximumRedeliveries=1&randomize=false&initialReconnectDelay=1000&maxReconnectDelay=30000
mq1.userName = xxx
mq1.password = xxx
mq2.brokerURL = failover:(tcp://xxx:61616,tcp://xxx:61617)?jms.prefetchPolicy.queuePrefetch=50&jms.redeliveryPolicy.maximumRedeliveries=1&randomize=false&initialReconnectDelay=1000&maxReconnectDelay=30000
mq2.userName = xxx
mq2.password = xxx