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
相关推荐
Harry技术1 小时前
Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能
vue.js·spring boot·后端
苹果酱05672 小时前
Golang的分布式系统开发
java·spring boot·毕业设计·layui·课程设计
小小药2 小时前
springboot
java·spring boot·后端
Leonardo_Fibonacci2 小时前
SpringBoot了解
java·spring boot·后端
食指Shaye3 小时前
Spring Boot项目中增加MQTT对接
spring boot·后端·mqtt·eureka
计算机-秋大田3 小时前
基于Spring Boot的城市垃圾分类管理系统设计与实现(LW+源码+讲解)
java·vue.js·spring boot·后端·spring·课程设计
路在脚下@4 小时前
SpringBoot的@Scheduled和@Schedules有什么区别
spring boot
苹果酱056711 小时前
Golang的文件加密技术研究与应用
java·vue.js·spring boot·mysql·课程设计
!!!52514 小时前
SpringBoot-web入门程序剖析
java·spring boot·后端
MiniFlyZt15 小时前
省市区三级联动(后端)
数据库·spring boot