首页 > 其他分享 >Spring boot多Rabbit MQ配置创建队列到指定MQ

Spring boot多Rabbit MQ配置创建队列到指定MQ

时间:2022-09-02 18:25:55浏览次数:37  
标签:connectionFactory return Spring boot rabbitmq Bean MQ spring public

1、场景

spring boot整合rabbitmq,需要将队列 queue1、queue2分别放在不同的MQ服务上MQ1、MQ2。

2、环境准备

MQ1:
IP:192.168.1.110
队列:queue1
MQ2:
IP:172.16.1.220
队列:queue2

3、关键点

实现的关键点是 创建队列 到 指定MQ服务器上。

4、实现代码

@Configuration
public class RabbitConfig {

    @Bean(name="firstConnectionFactory")
    @Primary
    public ConnectionFactory firstConnectionFactory(
            @Value("${spring.rabbitmq.first.host}") String host,
            @Value("${spring.rabbitmq.first.port}") int port,
            @Value("${spring.rabbitmq.first.username}") String username,
            @Value("${spring.rabbitmq.first.password}") String password
    ){
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
        connectionFactory.setHost(host);
        connectionFactory.setPort(port);
        connectionFactory.setUsername(username);
        connectionFactory.setPassword(password);
        return connectionFactory;
    }

    @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
    ){
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
        connectionFactory.setHost(host);
        connectionFactory.setPort(port);
        connectionFactory.setUsername(username);
        connectionFactory.setPassword(password);
        return connectionFactory;
    }

    @Bean(name="firstRabbitTemplate")
    //@Primary  //貌似没用,移除
    public RabbitTemplate firstRabbitTemplate(
            @Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory
    ){
        RabbitTemplate firstRabbitTemplate = new RabbitTemplate(connectionFactory);
        return firstRabbitTemplate;
    }

    @Bean(name="secondRabbitTemplate")
    public RabbitTemplate secondRabbitTemplate(
            @Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory
    ){
        RabbitTemplate secondRabbitTemplate = new RabbitTemplate(connectionFactory);
        return secondRabbitTemplate;
    }

    @Bean(name="firstFactory")
    public SimpleRabbitListenerContainerFactory firstFactory(
            SimpleRabbitListenerContainerFactoryConfigurer configurer,
            @Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory
    ) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        return factory;
    }

    @Bean(name="secondFactory")
    public SimpleRabbitListenerContainerFactory secondFactory(
            SimpleRabbitListenerContainerFactoryConfigurer configurer,
            @Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory
    ) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        return factory;
    }

    @Bean
    public String firstQueue(
            @Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory
    ) {
        try {
            connectionFactory.createConnection().createChannel(false).queueDeclare("hello1", false, false, false, null);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            return "firstQueue";
        }
    }

    @Bean
    public String secondQueue(
            @Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory
    ) {
        try {
             connectionFactory.createConnection().createChannel(false).queueDeclare("hello2", false, false, false, null);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            return "secondQueue";
        }
    }


    //下面2个对列创建方式 测试后发现不是 针对指定mq 服务器创建,只会在第一个服务器创建
    /*
    @Bean
    public Queue firstQueue() {
        return new Queue("hello1");
    }

    @Bean
    public Object secondQueue() {
        return new Queue("hello2");
    }
    */
}

标签:connectionFactory,return,Spring,boot,rabbitmq,Bean,MQ,spring,public
From: https://www.cnblogs.com/jinzlblog/p/16650866.html

相关文章

  • 放弃FastDFS!SpringBoot整合MinIO实现分布式文件服务,真香!
    今天分享一个非常不错且开源的分布式存储组件MinIO,有很多朋友在用。什么是MinIO?Minio是个基于Golang编写的开源对象存储套件,基于ApacheLicensev2.0开源协议,虽然轻量......
  • 外置tomcat方式部署springboot
    目录外置tomcat方式部署springboot1、打包方式的改变2、去除springboot中内置的tomcat(.xml中)3、启动类中增加继承SpringBootServletInitializer,重写configure方法外置tom......
  • spring注解开发
    @Componet组件,放在类上,说明这个类被spring管理了,就是bean类前加这个注解,相当于bean等价于<beanid="xxx"class="xxxxxx"/>名字默认是类的名字的小写@Value("xxx")相......
  • springboot~Screw生成数据库文档
    数据库说明文档,在我们开发项目时是非常必要的,有时项目交付时,客户也是需要让我们提供的,而如果人工编写,比如耗时,通过screw组件来生成文档,非常方便。源代码和使用:https://g......
  • 七(一)、activemq queue整合spring
    一、前言spring代码基于SSM整合(spring-springmvc-mybatis)之CRUD ;代码地址:(基础班:https://gitee.com/joy521125/ssm-senior-base.gitmaven版:https://gitee.com/joy5211......
  • springboot启动报错
    springboot启动报错Description:FieldstationInformationServiceincom.htkj.aicheck.service.TrainCheckServicerequiredabeanoftype'com.htkj.ai.server.service......
  • SpringMVC 05: SpringMVC中携带数据的页面跳转
    SpringMVC默认的参数对象SpringMVC默认的参数对象是指,不用再另行创建,相当于SpringMVC内置对象,可以直接声明并使用默认的参数对象有:HttpServletRequest,HttpServletRespon......
  • SpringMVC异常处理
    基于配置的异常处理SpringMVC提供了一个处理控制器,在方法执行过程中所出现的异常的接口:HandlerExceptionResolver,该接口的实现类有:DefaultHandlerExceptionResolver和Sim......
  • springboot 自定义注解拦截器
    参考:https://blog.csdn.net/mxlgslcd/article/details/89155315第一步:自定义注解@Target(ElementType.METHOD)//可用在方法名上@Retention(RetentionPolicy.RUNTIME)/......
  • SpringBoot多数据源配置
    在实际的开发或者线上环境中,一般都不仅仅是一个数据库走天下,而是根据业务进行拆分多个数据库。另外,在日常开发中我们都是以单个数据库进行开发,在小型项目中是完全能够满足......