1.当springboot程序只用一个amq时,只需要在配置文件里面简单配置相关连接项(配置项名字不能改),得益于springboot的自动装配功能,我们不需要写额外的配置类就能在程序里面轻松使用。

2.当springboot程序需要连接多个amq时,就需要手动编写jms的配置类了,这里两个mq(18mq,19mq)

package com.brilliant.ecserver.config;

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.config.DefaultJmsListenerContainerFactory;

import org.springframework.jms.config.JmsListenerContainerFactory;

import org.springframework.jms.core.JmsMessagingTemplate;

import javax.jms.ConnectionFactory;

/**

 * @ClassName AmpConfig

 * @Description ActiveMQ配置类,分别创建2个不同地址的MQ连接

 * @Author chengli

 * @Date 2021/8/17 14:04

 */

@Configuration

public class AmqConfig {

    @Bean(name = "mq19ConnectionFactory")

    public ActiveMQConnectionFactory mq19ConnectionFactory(

            @Value("${spring.activemq19.broker-url}") String brokerUrl,

            @Value("${spring.activemq19.user}") String username,

            @Value("${spring.activemq19.password}") String password) {

        return createConnectionFactory(brokerUrl, username, password);

    }

    @Bean(name = "mq19JmsTemplate")

    public JmsMessagingTemplate mq19JmsTemplate(

            @Qualifier("mq19ConnectionFactory") ActiveMQConnectionFactory connectionFactory) {

        JmsMessagingTemplate template = new JmsMessagingTemplate(connectionFactory);

        return template;

    }

    @Bean(name = "mq19JmsListenerContainerFactory")

    public JmsListenerContainerFactory mq19JmsListenerContainerFactory(

            @Qualifier("mq19ConnectionFactory") ActiveMQConnectionFactory connectionFactory) {

        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();

        factory.setPubSubDomain(true);

        factory.setConnectionFactory(connectionFactory);

        return factory;

    }

    //========================================================================================

    @Bean(name = "mq18ConnectionFactory")

    public ActiveMQConnectionFactory mq18ConnectionFactory(

            @Value("${spring.activemq18.broker-url}") String brokerUrl,

            @Value("${spring.activemq18.user}") String username,

            @Value("${spring.activemq18.password}") String password) {

        return createConnectionFactory(brokerUrl, username, password);

    }

    @Bean(name = "mq18JmsTemplate")

    public JmsMessagingTemplate mq18JmsTemplate(

            @Qualifier("mq18ConnectionFactory") ActiveMQConnectionFactory connectionFactory) {

        JmsMessagingTemplate template = new JmsMessagingTemplate(connectionFactory);

        return template;

    }

    @Bean(name = "mq18JmsListenerContainerFactory")

    public JmsListenerContainerFactory mq18JmsListenerContainerFactory(

            @Qualifier("mq18ConnectionFactory") ConnectionFactory connectionFactory) {

        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();

        factory.setPubSubDomain(true);

        factory.setConnectionFactory(connectionFactory);

        factory.setAutoStartup(true);

        return factory;

    }

    //========================================================================================

    /**

     * 创建ConnectionFactory

     * @param brokerUrl

     * @param username

     * @param password

     * @return

     */

    public ActiveMQConnectionFactory createConnectionFactory(String brokerUrl, String username, String password) {

        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();

        factory.setBrokerURL(brokerUrl);

        factory.setUserName(username);

        factory.setPassword(password);

        return factory;

    }

}

3.创建消费者的时候,注解后面加上containerFactory = "mq18JmsListenerContainerFactory")参数,指定你连接的mq

/**

     * 新能源车辆OBD数据

     * @param msg

     */

    @JmsListener(destination = "${ecserver.MQ_FROM_CLSERVER_VHSTATE}",containerFactory = "mq18JmsListenerContainerFactory")

    public void listenVehicle(Message msg) {

        vehicleMessageHandler.onMessage(msg);

    }

4.生产者的创建在自动注入JmsMessagingTemplate时,实例名写配置类中配置的名字即可mq18JmsTemplate

package com.brilliant.ecserver.amq.publishers;

import org.apache.activemq.command.ActiveMQTopic;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.jms.core.JmsMessagingTemplate;

import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;

import javax.jms.Destination;

@Service

public class VehiclePublisher {

    @Value("${ecserver.MQ_TO_AVMS_VHSTATE}")

    private String topicName;

    private Destination destination;

    @PostConstruct

    void init(){

        destination = new ActiveMQTopic(topicName);

    }

    @Autowired

    JmsMessagingTemplate mq18JmsTemplate;

    public void sendMessage(String msg) {

        mq18JmsTemplate.convertAndSend(destination, msg);

    }

}

Springboot中使用多个AMQ相关推荐

  1. 在SpringBoot中使用Spring Session解决分布式会话共享问题

    在SpringBoot中使用Spring Session解决分布式会话共享问题 问题描述: 每次当重启服务器时,都会导致会员平台中已登录的用户掉线.这是因为每个用户的会话信息及状态都是由session ...

  2. SpringBoot 中 JPA 的使用

    前言 第一次使用 Spring JPA 的时候,感觉这东西简直就是神器,几乎不需要写什么关于数据库访问的代码一个基本的 CURD 的功能就出来了.下面我们就用一个例子来讲述以下 JPA 使用的基本操作 ...

  3. 难以想象SpringBoot中的条件注解底层居然是这样实现的

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...

  4. 面试:SpringBoot中的条件注解底层是如何实现的?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...

  5. springboot yml怎么建常量_【Java】SpringBoot 中从application.yml中获取自定义常量

    由于这里我想通过java连接linux,connection连接需要host.port.username.password及其他路径等等.不想每次修改的时候都去改源文件,所以想写在applicatio ...

  6. Springboot中给图片添加文字水印

    Springboot中给图片添加文字水印 工作中遇到给图片添加文字水印的需求,记录下来方便之后查阅 需求内容: 给一张图片添加指定文字水印,使一张图片上有多个水印内容,并且设定一个水印开关,可指定是否 ...

  7. 你知道如何在springboot中使用redis吗

    特别说明:本文针对的是新版 spring boot 2.1.3,其 spring data 依赖为 spring-boot-starter-data-redis,且其默认连接池为 lettuce ​  ...

  8. WebSocket的故事(六)—— Springboot中,实现更灵活的WebSocket

    概述 WebSocket的故事系列计划分五大篇六章,旨在由浅入深的介绍WebSocket以及在Springboot中如何快速构建和使用WebSocket提供的能力.本系列计划包含如下几篇文章: 第一篇 ...

  9. SpringBoot 中 @RestController 和 @Controller 的区别

    1 - 在springboot中,@RestController 相当于 @Controller + @ResponseBody; 2 - 即在Controller类中,若想返回jsp或html页面, ...

最新文章

  1. SAP IDoc E1EDP04 Z8 数据错误之对策
  2. 使用reveal.js制作PPT,并部署至GitHub
  3. php按比例截图,php 按比例生成小图函数
  4. 学习笔记Hadoop(八)—— Hadoop集群的安装与部署(5)—— Hadoop配置参数介绍、Hadoop集群启动与监控
  5. 电热水器和插座之间的相亲故事
  6. 如何通过MongoDB自带的Explain功能提高检索性能?
  7. pytorch tensor的数据类型
  8. 前端的UI设计与交互之反馈示篇
  9. 008 查看套接字选项是否受支持(获取当前环境下套接字选项默认值)
  10. 集腋成裘-13-git使用-02进阶篇
  11. win10有源信号分辨率怎么调_示波器高灵敏度小信号测量的注意事项
  12. 5个python小游戏,python学习放松
  13. UrlRewrite 的配置和使用总结
  14. 虚拟机怎样使用代理服务器上网,VMware虚拟机使用NAT模式上网的方法
  15. 【iOS】【最新】2022苹果开发者账号注册流程
  16. 强烈推荐:网工利器PNETLab模拟器
  17. 计算机16进制A3 B9,ASCII码16进制对照表
  18. css中@media写法在ie 、firefox、Opera、Chrome、Safari 浏览器中的支持
  19. 面试题:什么是野指针?产生野指针的原因?
  20. Ubuntu上安装搜狗中文输入法

热门文章

  1. RFID仓库管理解决方案,挑选RFID仓库管理系统的影响因素-新导智能
  2. 太晚睡觉3点左右 深度睡眠法
  3. Winwows下Python命令行执行脚本乱码
  4. 如何系统地自学 Python
  5. 带你进⼊ OpenAI 的世界
  6. Codeforces Round #335 (Div. 2) D. Lazy Student 构造
  7. java去除网页中的广告和导航等信息_java 文档 已取消到该网页的导航 解决方案...
  8. C语言:if(a)——if(!a)——if(a!=0)——if(a==0)有什么区别?
  9. 【MM系列】SAP库龄报表逻辑理解
  10. php获取json中的内容