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
相关推荐
Flittly12 小时前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring
人活一口气17 小时前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot
Java陈序员1 天前
企业级!一个基于 Java 开发的开源 AI 应用开发平台!
spring boot·agent·mcp
杨运交2 天前
[041][公共模块]分布式唯一ID生成器设计与实现:一款灵活可扩展的雪花算法框架
spring boot
Flittly3 天前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring
Flynt4 天前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
掉鱼的猫5 天前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·spring boot
人活一口气5 天前
Spring Boot与AIGC的完美结合:从零搭建智能内容生成平台
java·spring boot·aigc
java小白小8 天前
SpringBoot(01): 初识SpringBoot,从Spring的痛点说起
spring boot
用户3169353811839 天前
如何从零编写一个 Spring Boot Starter
spring boot