• spring boot rabbitmq 多MQ配置 自动 创建 队列 RPC


    源码地址:https://github.com/hutuchong518/RabbitmqStudy

    需求:   spring boot 整合 rabbitmq rpc功能, 需要将 请求和响应 这两个队列 分别放在不同的MQ服务器上,以提高单个MQ服务器的吞吐量和性能。

    MQ服务器1:  

          IP:192.168.179.128

         对列:hello1

        

    MQ服务器2:  

          IP:172.16.16.218

         对列:hello2

    这里实现的关键 是  创建队列 到 指定 MQ服务器中, 网上一些文章 都是 一把轮 没有区分,在实施上有问题的其实,这里通过实践并解决,以供参考。

    下面是代码:

      1 package com.mq.util;
      2 
      3 
      4 import com.rabbitmq.client.AMQP;
      5 import com.rabbitmq.client.Channel;
      6 import org.springframework.amqp.core.Queue;
      7 import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
      8 import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
      9 import org.springframework.amqp.rabbit.connection.Connection;
     10 import org.springframework.amqp.rabbit.connection.ConnectionFactory;
     11 import org.springframework.amqp.rabbit.core.RabbitTemplate;
     12 import org.springframework.beans.factory.annotation.Qualifier;
     13 import org.springframework.beans.factory.annotation.Value;
     14 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
     15 import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
     16 import org.springframework.context.annotation.Bean;
     17 import org.springframework.context.annotation.Configuration;
     18 import org.springframework.context.annotation.Primary;
     19 import org.springframework.context.annotation.Scope;
     20 
     21 import java.io.IOException;
     22 
     23 
     24 @Configuration
     25 public class RabbitConfig {
     26 
     27     @Bean(name = "firstConnectionFactory")
     28     @Primary
     29     public ConnectionFactory firstConnectionFactory(
     30             @Value("${spring.rabbitmq.first.host}") String host,
     31             @Value("${spring.rabbitmq.first.port}") int port,
     32             @Value("${spring.rabbitmq.first.username}") String username,
     33             @Value("${spring.rabbitmq.first.password}") String password
     34     ) {
     35         CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
     36         connectionFactory.setHost(host);
     37         connectionFactory.setPort(port);
     38         connectionFactory.setUsername(username);
     39         connectionFactory.setPassword(password);
     40         return connectionFactory;
     41     }
     42 
     43     @Bean(name = "secondConnectionFactory")
     44     public ConnectionFactory secondConnectionFactory(
     45             @Value("${spring.rabbitmq.second.host}") String host,
     46             @Value("${spring.rabbitmq.second.port}") int port,
     47             @Value("${spring.rabbitmq.second.username}") String username,
     48             @Value("${spring.rabbitmq.second.password}") String password
     49     ) {
     50         CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
     51         connectionFactory.setHost(host);
     52         connectionFactory.setPort(port);
     53         connectionFactory.setUsername(username);
     54         connectionFactory.setPassword(password);
     55         return connectionFactory;
     56     }
     57 
     58     @Bean(name = "firstRabbitTemplate")
     59     //@Primary  //貌似没用,移除
     60     @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)//必须是prototype类型
     61     public RabbitTemplate firstRabbitTemplate(
     62             @Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory
     63     ) {
     64         RabbitTemplate firstRabbitTemplate = new RabbitTemplate(connectionFactory);
     65         return firstRabbitTemplate;
     66     }
     67 
     68     @Bean(name = "secondRabbitTemplate")
     69     public RabbitTemplate secondRabbitTemplate(
     70             @Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory
     71     ) {
     72         RabbitTemplate secondRabbitTemplate = new RabbitTemplate(connectionFactory);
     73         return secondRabbitTemplate;
     74     }
     75 
     76     @Bean(name = "firstFactory")
     77     public SimpleRabbitListenerContainerFactory firstFactory(
     78             SimpleRabbitListenerContainerFactoryConfigurer configurer,
     79             @Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory
     80     ) {
     81         SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
     82         configurer.configure(factory, connectionFactory);
     83         return factory;
     84     }
     85 
     86     @Bean(name = "secondFactory")
     87     public SimpleRabbitListenerContainerFactory secondFactory(
     88             SimpleRabbitListenerContainerFactoryConfigurer configurer,
     89             @Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory
     90     ) {
     91         SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
     92         configurer.configure(factory, connectionFactory);
     93         return factory;
     94     }
     95 
     96     @Bean
     97     public void runFirstQueue(@Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory) {
     98         System.out.println("configuration firstQueue ........................");
     99         //return new Queue("hello1");
    100         Connection connection = connectionFactory.createConnection();
    101         Channel channel = connection.createChannel(false);
    102         try {
    103             channel.queueDeclare("hello1", false, false, false, null);
    104             channel.queueBind("hello1", "exchange1", "hello.#");
    105         } catch (Exception e) {
    106             e.printStackTrace();
    107         }
    108     }
    109 
    110     @Bean
    111     public void runSecondQueue(@Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory) {
    112         System.out.println("configuration secondQueue ........................");
    113         //return new Queue("hello2");
    114         Connection connection = connectionFactory.createConnection();
    115         Channel channel = connection.createChannel(false);
    116         try {
    117             channel.queueDeclare("hello2", false, false, false, null);
    118             channel.queueBind("hello2", "exchange2", "hello.#");
    119         } catch (Exception e) {
    120             e.printStackTrace();
    121         }
    122     }
    123 
    124 
    125     //下面2个对列创建方式 测试后发现不是 针对指定mq 服务器创建,只会在第一个服务器创建
    126     /*
    127     @Bean
    128     public Queue firstQueue() {
    129         System.out.println("configuration firstQueue ........................");
    130         return new Queue("hello1");
    131     }
    132 
    133     @Bean
    134     public Object secondQueue() {
    135         System.out.println("configuration secondQueue ........................");
    136         return new Queue("hello2");
    137     }
    138     */
    139 }

    参考:https://www.cnblogs.com/hutuchong/p/7443252.html

  • 相关阅读:
    【计算机视觉】基于自组织背景减除的运动目标检测算法
    【计算机视觉】背景建模之PBAS
    【计算机视觉】背景建模之PBAS
    【计算机视觉】【并行计算与CUDA开发】GPU硬解码---DXVA
    【计算机视觉】【并行计算与CUDA开发】GPU硬解码---DXVA
    【计算机视觉】【并行计算与CUDA开发】GPU硬编码
    【计算机视觉】【并行计算与CUDA开发】GPU硬编码
    【计算机视觉】【并行计算与CUDA开发】GPU硬解码---CUVID
    【计算机视觉】【并行计算与CUDA开发】GPU硬解码---CUVID
    【计算机视觉】【并行计算与CUDA开发】OpenCV中GPU模块使用
  • 原文地址:https://www.cnblogs.com/zt007/p/9530155.html
Copyright © 2020-2023  润新知