SpringBoot项目配置多个RabbitMQ解决方案

这篇具有很好参考价值的文章主要介绍了SpringBoot项目配置多个RabbitMQ解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景介绍

目前有一个Spring Boot项目,已经接入一个RabbitMQ Broker,由于业务扩展,需要新增一个RabbitMQ Broker进行消费,由于单个Broker时通过Spring默认配置进行使用,因此需要做出修改文章来源地址https://www.toymoban.com/news/detail-505656.html

Java客户端开发Demo

ConnectionFactory factory = new ConnectionFactory();
factory.setHost(IP_ADDRESS);
factory.setPort(PORT);
factory.setUsername("root");
factory.setPassword("root123");
factory.setVirtualHost("/");
// 创建链接
Connection connection = factory.newConnection();
// 创建信道,Connection 接口被用来创建一个Channel
Channel channel = connection.createChannel();
// 创建一个type="direct" 持久化、非自动删除的交换机
channel.exchangeDeclare(QUEUE_NAME, "direct", true, false, null);
// 创建一个持久化、非排他的、非自动删除的队列
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);
// 发送一条持久化的消息
String message = "hello world!";
channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());
// 关闭资源
channel.close();
connection.close();

单实例配置

  1. pom
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-amqp</artifactId>
	<version>2.1.2.RELEASE</version>
</dependency>
  1. 增加properties配置
spring.rabbitmq.username=username
spring.rabbitmq.password=password
spring.rabbitmq.host=host
spring.rabbitmq.virtual-host=/
spring.rabbitmq.port=port
  1. 增加配置类
@Configuration
public class RabbitMqConfiguration {
	@Bean
    public RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory,MessageConverter messageConverter){
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setMessageConverter(messageConverter);
        return factory;
    }

    @Bean
    public MessageConverter messageConverter(){
        ObjectMapper objectMapper = new ObjectMapper();
        Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter(objectMapper);
        return jackson2JsonMessageConverter;
    }
}

多实例配置

  1. 增加properties配置
# 默认rabbit配置
spring.rabbitmq.username=username
spring.rabbitmq.password=password
spring.rabbitmq.host=host
spring.rabbitmq.virtual-host=/
spring.rabbitmq.port=port
# 第2个MQ配置
spring.rabbitmq.second.host=second.host
spring.rabbitmq.second.username=second.username
spring.rabbitmq.second.password=second.password
spring.rabbitmq.second.port=second.port
spring.rabbitmq.second.virtual-host=/
  1. 修改配置类
/**
 * @Description:
 * @Author: admin
 * @Date: 2021/5/11 18:19
 */
@Configuration
public class RabbitMqConfiguration {
    @Primary
    @Bean(name = "rabbitConnectionFactory")
    public ConnectionFactory rabbitConnectionFactory(
            @Value("${spring.rabbitmq.host}") String host,
            @Value("${spring.rabbitmq.port}") int port,
            @Value("${spring.rabbitmq.username}") String username,
            @Value("${spring.rabbitmq.password}") String password,
            @Value("${spring.rabbitmq.virtual-host}") String virtualHost) {
        return connectionFactory(host, port, username, password, virtualHost);
    }

    @Bean
    public RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(
            @Qualifier("rabbitConnectionFactory") ConnectionFactory connectionFactory,
            MessageConverter messageConverter) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setMessageConverter(messageConverter);
        return factory;
    }

    /**
     * 定义连接
     * @param host
     * @param port
     * @param username
     * @param password
     * @return
     */
    @Bean(name = "secondConnectionFactory")
    public ConnectionFactory secondConnectionFactory(
            @Value("${spring.rabbitmq.second.host}") String host,
            @Value("${spring.rabbitmq.second.port}") int port,
            @Value("${spring.rabbitmq.second.username}") String username,
            @Value("${spring.rabbitmq.second.password}") String password,
            @Value("${spring.rabbitmq.second.virtual-host}") String virtualHost) {
        return connectionFactory(host, port, username, password, virtualHost);
    }

    /**
     * 声明RabbitTemplate
     * @param connectionFactory
     * @return
     */
    @Bean(name = "secondRabbitTemplate")
    public RabbitTemplate dataadminmqRabbitTemplate(
            @Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate .setMessageConverter(new Jackson2JsonMessageConverter());
        return rabbitTemplate ;
    }
    
    @Bean(name = "secondRabbitListenerContainerFactory")
    public SimpleRabbitListenerContainerFactory secondRabbitListenerContainerFactory(
            @Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory,
            MessageConverter messageConverter) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setMessageConverter(messageConverter);
        return factory;
    }
    
    @Bean
    public MessageConverter messageConverter(){
        ObjectMapper objectMapper = new ObjectMapper();
        Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter(objectMapper);
        return jackson2JsonMessageConverter;
    }

    /**
     * 声明连接工厂连接开发服务器
     *
     * @param host
     * @param port
     * @param username
     * @param password
     * @return
     */
    public CachingConnectionFactory connectionFactory(String host, int port, String username,
                                                      String password, String virtualHost) {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
        connectionFactory.setHost(host);
        connectionFactory.setPort(port);
        connectionFactory.setUsername(username);
        connectionFactory.setPassword(password);
        connectionFactory.setVirtualHost(virtualHost);
        return connectionFactory;
    }
}

到了这里,关于SpringBoot项目配置多个RabbitMQ解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springBoot框架 yml配置文件中出现特殊字符解决方案

    springBoot框架 yml配置文件中出现特殊字符问题是我最近才发现的一个问题,以前常用.properties 格式配置文件,没发现此现象,因此此格式的配置文件不存在这种问题,即使有特殊符号也可以正常识别;缓冲yml格式后就不能识别了。并且细心的人可以明显的发现配置文件有问题

    2024年02月16日
    浏览(33)
  • 宝兰德BES安装及Springboot项目打包部署及websocket解决方案

    随着软件国产化越来越普及,客户在实施中选择了宝兰德,这几天终于弄好,发个文章记录一下。 BES安装JDK使用版本为Kona8.0.1_242 2.bes安装,在实施过程中,将安装步骤整合成shell脚本了,方便新服务器一键安装,脚本包含内容:一键安装参数检查、解压安装包、导入证书、指

    2024年01月19日
    浏览(34)
  • springboot项目出现”java: 错误: 无效的源发行版:17“问题解决方案

    在我个人遇到此问题的情况下,出现此错误的原因是springboot的版本与java版本不一致 在spring3更新后,idea在创建springboot项目时会默认选择spring3,哪怕你选择的是 java8 的版本 idea默认选择spring3 在你以java8创建spring3的项目后,就一定会出现”java: 错误: 无效的源发行版:17“,如

    2024年02月01日
    浏览(58)
  • SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案

    这两个问题的出现场景是,你打包完一个SpringBoot、Maven项目,上传Jar包到服务器运行的时候遇到的。也算是比较经典的两个问题了,如果你在打包项目的时候,很容易遇到,这篇文章就是用来一劳永逸地解决它们。 1.1、Jar包运行:没有主清单属性 解决方案 其实这个问题主要

    2024年04月14日
    浏览(21)
  • IntelliJ IDEA创建springboot项目时不能选择java8的问题解决方案

    最近博主也有创建springboot项目,发现了IntelliJ IDEA在通过Spring Initilizer初始化项目的时候已经没有java8版本的选项了。 基于这个问题,有了这篇文章的分享,希望能够帮助大家克服这个困难。 如图,现在创建springboot项目的时候,java版本只有17和21两个选项,刚好今天晚上有刷

    2024年02月04日
    浏览(71)
  • SpringBoot项目启动报java.nio.charset.MalformedInputException Input length = 1解决方案

    SpringBoot启动报错java.nio.charset.MalformedInputException: Input length = 1 出现这个的原因,就是解析yml文件时,中文字符集不是 utf-8 的原因,这是maven在项目编译时,默认字符集编码是GBK。 检查pom文件 要将编译字符集改成utf-8。 IDEA编码格式修改 文件修改 如果你的application.yml文件是把

    2024年02月20日
    浏览(27)
  • IDEA构建springBoot新项目时JDK只有17和21,无法选择JDK8解决方案

    今天创建springboot新项目时,发现IDEA里JDK选项只有17和21,无法选择本机的JDK8,网上查资料后发现是springboot2.7于11.24号后停止维护,基于2.7和java8的spring Initializ官方不再维护,解决方案是在server URL栏,改start.spring.io为阿里源:https://start.aliyun.com/

    2024年01月17日
    浏览(42)
  • 创建延时队列、springboot配置多个rabbitmq

    type选择fanout (图中已经绑定,红框为绑定过程) (图中已经绑定,红框为绑定过程) 延时队列时间到之后,将消息发送给queue.file_destroy,执行删除文件操作 RabbitConfig配置类 mq1 mq2 application-prod.yaml mq1消费端,发消息给mq2 mq2消费端用于递归删除文件 FileHelper工具类递归删除文件或文

    2024年02月11日
    浏览(33)
  • springboot项目使用mybatis-plus 时出现 Property ‘mapperLocations‘ was not specified的3个解决方案

    在 spring boot 项目中,使用 mybatis-plus 会出现 Property ‘mapperLocations‘ was not specified 的提示。出现该提示,但可能不影响项目的运行。这是怎么回事? 在解决这个问题之前,要先讨论一下 mybatis 的 xml 文件放的位置。通常有3个地方,如下图: 方案1:放在 1 的位置,IEDA默认不会

    2024年02月12日
    浏览(44)
  • RabbitMQ--消息堆积--解决方案

    原文网址:RabbitMQ--消息堆积--解决方案_IT利刃出鞘的博客-CSDN博客 本文介绍如何处理RabbitMQ消息堆积(积压)。 对于消息队列(MQ)来说,消息丢失/消息重复/消费顺序/消息堆积(积压)是比较常见的问题,都属于消息异常,这几个问题比较重要,面试中也会经常问到。 消息堆积即

    2023年04月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包