Spring Boot配置多个RabbitMQ

Spring Boot配置多个RabbitMQ

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    <version>1.5.2.RELEASE</version>
</dependency>

1.application.yml

spring:
    rabbitmq:
      hospSync:
        host: localhost
        port: 5672
        username: test
        password: test
        virtual-host: test
      pay:
        host: localhost
        port: 5672
        username: demo
        password: demo
        virtual-host: demo

  rabbitmq:
    first:
      # 内部生产mq
      addresses: localhost:5672
      username: guest
      password: guest
    second:
      # 防疫外部消费mq
      addresses: localhost:5672
      username: guest
      password: guest
second:
  queueName: queue.device.police.log.1651826493

RabbitMQConfig

import com.unicom.oc.common.aop.RabbitConstants;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

@Configuration
public class RabbitMQConfig {

    /**
     * 数字哨兵内部用的 mq地址 主要功能是生产数据
     * @param addresses
     * @param username
     * @param password
     * @return
     */

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

    @Bean(name="firstRabbitTemplate")
    @Primary
    public RabbitTemplate firstRabbitTemplate(
            @Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory
    ){
        RabbitTemplate firstRabbitTemplate = new RabbitTemplate(connectionFactory);
        firstRabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
        return firstRabbitTemplate;
    }

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

    /**
     * 防疫日志用的 mq地址 主要功能是消费外部数据落库
     * @param addresses
     * @param username
     * @param password
     * @return
     */

    @Bean(name="secondConnectionFactory")
    public ConnectionFactory secondConnectionFactory(
            @Value("${spring.rabbitmq.second.addresses}") String addresses,
            @Value("${spring.rabbitmq.second.username}") String username,
            @Value("${spring.rabbitmq.second.password}") String password
    ){
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
        connectionFactory.setAddresses(addresses);
        connectionFactory.setUsername(username);
        connectionFactory.setPassword(password);
        return connectionFactory;
    }


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



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



    @Bean(name="firstFactory")
    public MessageConverter messageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    /**
     *<p>Title: messageQueue</p>
     *<p>Description: 队列</p>
     * @return
     */
    @Bean(name="firstFactory")
    public Queue messageQueue() {
        return new Queue(RabbitConstants.MESSAGE_QUEUE, true);
    }


    /**
     *<p>Title: directExchange</p>
     *<p>Description: 路由模式</p>
     * @return
     */
    @Bean(name="firstFactory")
    public DirectExchange directExchange() {
        return new DirectExchange(RabbitConstants.DIRECT_EXCHANGE);
    }


    /**
     *<p>Title: bindingMessage</p>
     *<p>Description: 使用directExchange交换机绑定短信队列</p>
     * @return
     */
    @Bean(name="firstFactory")
    public Binding directExchangeBindingMessage() {
        return BindingBuilder.bind(messageQueue()).to(directExchange()).with(RabbitConstants.MESSAGE_ROUTING_KEY);
    }



}

发送消息

@Resource(name = "mainRabbitTemplate")
    protected RabbitTemplate rabbitTemplate;


    public MessageProvider(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
        this.rabbitTemplate.setMandatory(true);
        this.rabbitTemplate.setConfirmCallback(this);
    }

    public void sendMessage(RealBusBaseLineDTO realBusBaseLineDTO) {
        if (realBusBaseLineDTO != null) {
            String msg = JSON.toJSONString(realBusBaseLineDTO, SerializerFeature.DisableCircularReferenceDetect);
            rabbitTemplate.convertAndSend(QueueEnum.MESSAGE_REALBUS_QUEUE.getExchange(), QueueEnum.MESSAGE_REALBUS_QUEUE.getRouteKey(), msg);
        } else {
            log.warn("消息内容为空!!!!!");
        }
    }

消费消息

@Resource
    private IRealBusDataService realBusDataService;
    @Value("${network.bus.isReadActiveQueue}")
    private Boolean isReadActiveQueue;

    @RabbitListener(queues = QueueContent.MESSAGE_REALBUS_DATA_QUEUE_NAME, containerFactory = "secondFactory")
    @RabbitHandler
    public void processRealBusDataQueue(String msg, Channel channel, Message message) throws IOException {
            log.warn("processRealBusDataQueue:{} ", msg);
            try {
                String bodyMessage = new String(msg);
				// 逻辑处理
            } catch (Exception e) {
                log.error("确认消费异常", e);
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Spring Boot提供了对RabbitMQ的支持,可以使用RabbitMQ作为消息代理来实现应用程序之间的异步通信。以下是在Spring Boot中使用RabbitMQ的步骤: 1. 添加依赖 在`pom.xml`中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` 2. 配置RabbitMQ连接信息 在`application.properties`中添加以下配置信息: ```properties spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest ``` 3. 创建消息队列 使用`@Configuration`注解创建一个配置类,并使用`@Bean`注解创建一个`Queue`对象,如下所示: ```java @Configuration public class RabbitMQConfig { @Bean public Queue myQueue() { return new Queue("myQueue"); } } ``` 4. 发送消息 使用`RabbitTemplate`发送消息,如下所示: ```java @Autowired private RabbitTemplate rabbitTemplate; public void sendMessage(String message) { rabbitTemplate.convertAndSend("myQueue", message); } ``` 5. 接收消息 使用`@RabbitListener`注解创建一个监听方法,如下所示: ```java @RabbitListener(queues = "myQueue") public void receiveMessage(String message) { System.out.println("Received message: " + message); } ``` 现在,当发送消息时,监听方法将自动接收并处理该消息。 以上是在Spring Boot中使用RabbitMQ的基本步骤,还有更多高级用法和配置选项可以在官方文档中了解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值