springboot集成activemq,并配置多个mq

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
相关推荐
tuine12 分钟前
SpringBoot使用LocalDate接收参数解析问题
java·spring boot·后端
番茄Salad1 小时前
Spring Boot项目中Maven引入依赖常见报错问题解决
spring boot·后端·maven
摇滚侠2 小时前
Spring Boot 3零基础教程,yml配置文件,笔记13
spring boot·redis·笔记
!if2 小时前
springboot mybatisplus 配置SQL日志,但是没有日志输出
spring boot·sql·mybatis
阿挥的编程日记3 小时前
基于SpringBoot的影评管理系统
java·spring boot·后端
java坤坤3 小时前
Spring Boot 集成 SpringDoc OpenAPI(Swagger)实战:从配置到接口文档落地
java·spring boot·后端
摇滚侠4 小时前
Spring Boot 3零基础教程,整合Redis,笔记12
spring boot·redis·笔记
荣淘淘4 小时前
互联网大厂Java求职面试全景实战解析(涵盖Spring Boot、微服务及云原生技术)
java·spring boot·redis·jwt·cloud native·microservices·interview
吃饭最爱4 小时前
spring高级知识概览
spring boot