`
buddie
  • 浏览: 185549 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

springboot集成多个rabbitmq

 
阅读更多

springboot版本:1.5.19.RELEASE

Gradle版本:4.10

 

Gradle的build.gradle中增加引入

compile('org.springframework.boot:spring-boot-starter-amqp')

 

application.yaml中增加配置

buddie:
  rabbitmq:
    consume:
      host: 127.0.0.1
      port: 5672
      username: admin
      password: admin
    produce:
      host: 127.0.0.1
      port: 5674
      username: admin
      password: admin

 

增加配置类,配置我们的两个rabbitMQ:

import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
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 RabbitConfig {

    public ConnectionFactory rabbitConfiguration(String host, int port, String username, String password) {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
        connectionFactory.setHost(host);
        connectionFactory.setPort(port);
        connectionFactory.setUsername(username);
        connectionFactory.setPassword(password);
        return connectionFactory;
    }

    @Bean("consumeRabbitConnectionFactory")
    @Primary
    public ConnectionFactory innerRabbitConfiguration(@Value("${buddie.rabbitmq.consume.host}") String host,
                                                      @Value("${buddie.rabbitmq.consume.port}") int port,
                                                      @Value("${buddie.rabbitmq.consume.username}") String username,
                                                      @Value("${buddie.rabbitmq.consume.password}") String password) {
        return this.rabbitConfiguration(host, port, username, password);
    }

    @Bean("consumeRabbitTemplate")
    @Primary
    public RabbitTemplate consumeRabbitTemplate(
            @Qualifier("consumeRabbitConnectionFactory") ConnectionFactory connectionFactory
    ) {
        return new RabbitTemplate(connectionFactory);
    }

    public SimpleRabbitListenerContainerFactory rabbitFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        return factory;
    }

    @Bean("consumeRabbitFactory")
    public SimpleRabbitListenerContainerFactory consumeRabbitFactory(
            SimpleRabbitListenerContainerFactoryConfigurer configurer,
            @Qualifier("consumeRabbitConnectionFactory") ConnectionFactory connectionFactory
    ) {
        return this.rabbitFactory(configurer, connectionFactory);
    }

    @Bean("produceRabbitConnectionFactory")
    public ConnectionFactory outerRabbitConfiguration(@Value("${buddie.rabbitmq.produce.host}") String host,
                                                      @Value("${buddie.rabbitmq.produce.port}") int port,
                                                      @Value("${buddie.rabbitmq.produce.username}") String username,
                                                      @Value("${buddie.rabbitmq.produce.password}") String password) {
        return this.rabbitConfiguration(host, port, username, password);
    }

    @Bean("produceRabbitTemplate")
    public RabbitTemplate produceRabbitTemplate(
            @Qualifier("produceRabbitConnectionFactory") ConnectionFactory connectionFactory
    ) {
        return new RabbitTemplate(connectionFactory);
    }

    @Bean("produceRabbitFactory")
    public SimpleRabbitListenerContainerFactory outerRabbitFactory(
            SimpleRabbitListenerContainerFactoryConfigurer configurer,
            @Qualifier("produceRabbitConnectionFactory") ConnectionFactory connectionFactory
    ) {
        return this.rabbitFactory(configurer, connectionFactory);
    }

    @Bean
    public Queue topicQueueCreate() {
        return new Queue("topic.task");
    }


    @Bean
    public TopicExchange topicExchange() {
        return new TopicExchange("topic.exchange");
    }

    @Bean
    public Binding topicBindingCreate() {
        return BindingBuilder.bind(this.topicQueueCreate()).to(this.topicExchange()).with("topic.task.#");
    }

}

 

注意事项:

做为生产者,在启服时,并不会对连接rabbitMQ,更不会去创建Topic,Queue及绑定。

而作为消费者,在启服后,会连接rabbitMQ,并检查Queue是否有消息可消费。

所以应该将消费的rabbitMQ配置,加上@Primary,否则在rabbitMQ上没有对应的Queue时,报错,无法启动服务器

分享到:
评论

相关推荐

    详解Spring Boot 配置多个RabbitMQ

    Spring Boot 配置多个 RabbitMQ Spring Boot 是一个流行的 Java 框架,用于快速构建生产级别的应用程序。RabbitMQ 是一个消息队列中间件,用于实现异步消息处理和队列管理。配置多个 RabbitMQ 实例是为了提高系统的...

    rabbitmq基础+springboot集成rabbitmq

    项目中的`RabbitMq.docx`可能包含RabbitMQ和SpringBoot集成的详细教程,包括如何配置、发送和接收消息的示例代码。而`文件说明.txt`可能是对项目文件的简要介绍,解释了各个文件的作用和使用方法。 **项目结构** `...

    基于springboot+maven的rabbitmq项目demo

    在RabbitMQ的发布/订阅模式下,生产者发布消息到一个交换机,交换机再根据预定义的路由规则将消息分发到一个或多个队列。消费者则订阅这些队列,接收到消息。这种模式适用于一对多的关系,比如广播通知或者日志记录...

    SpringBoot-RabbitMQ生产者和消费者.7z

    2. **Publish/Subscribe模式**:在这种模式下,生产者发布消息到一个主题,而多个消费者可以订阅该主题。每个消费者都可以接收到所有发布到该主题的消息,实现一对多的消息广播。 3. **Topic模式**:这是介于Direct...

    springboot+rabbitmq项目demo(亲测,可正常运行)

    在本文中,我们将深入探讨如何使用SpringBoot与RabbitMQ构建一个可...实际应用中,你可能需要处理更复杂的情况,如多个消费者、交换机、路由键等。不过,这个简单的Demo为你提供了理解RabbitMQ与SpringBoot结合的基础。

    springboot+reids_rabbitmq

    总结来说,"springboot+reids_rabbitmq"项目是利用Spring Boot构建一个后端服务,结合Redis进行数据缓存,利用RabbitMQ进行消息传递和任务调度,以实现高并发场景下的秒杀功能。这种架构设计不仅提高了系统的响应...

    SpringBoot集成RabbitMQ代码示例

    在IT行业中,SpringBoot是一个广泛使用的Java框架,它简化了Spring应用的初始搭建以及开发过程。...在实际项目中,还可以根据需求配置多个交换机、队列和路由键,以满足不同场景下的消息通信需求。

    springboot-integrate-rabbitmq:springboot-集成-rabbitmq

    每个队列可以有零个或多个消费者监听。 6. **绑定(Bindings)**:将队列与交换机绑定,指定消息如何从交换机流向队列。可以基于路由键(Routing Key)进行绑定。 7. **生产者(Producer)**:在Spring Boot应用中...

    springboot整合rabbitMq和多数据源动态切换和跨域访问和gradle加maven和shiro安全框架和lombok自动getset生成

    标题中的“springboot整合rabbitMq和多数据源动态切换和跨域访问和gradle加maven和shiro安全框架和lombok自动getset生成”表明这是一个关于Spring Boot集成多个技术的项目。以下是对这些技术及其整合的详细解释: 1...

    springboot+websocket+Stomp+RabbitMq 实现多人聊天室

    在本文中,我们将深入探讨如何使用Spring Boot、WebSocket、STOMP协议和RabbitMQ来构建一个功能完善的多人聊天室系统。这些技术的结合为实时通信提供了高效且可靠的解决方案。 首先,Spring Boot是Java开发Web应用...

    SpringBoot简单集成RabbitMq

    这个例子只是一个基础的示例,实际应用中可能需要处理更复杂的情况,如多个消费者、消息确认、事务和死信队列等。Spring AMQP提供了丰富的API和工具,可以满足各种高级需求。通过进一步学习和实践,你可以更好地利用...

    springboot整合RabbitMQ

    SpringBoot 整合 RabbitMQ 的过程涉及到多个关键知识点,这些知识点包括了消息中间件的基本概念、SpringBoot 的集成方式、RabbitMQ 的配置与使用,以及相关工具的配合。以下是对这些内容的详细阐述。 首先,...

    springboot集成rabbitMQ之对象传输的方法

    RabbitMQ 的安装方法网上有很多教程,这里就不重复了。需要注意的是,在使用 RabbitMQ 之前,需要先安装 RabbitMQ 服务器。 二、依赖配置 在使用 RabbitMQ 之前,需要在项目的 pom.xml 文件中添加 RabbitMQ 的依赖...

    springboot+RabbitMQ三种模式demo

    SpringBoot是Spring框架的轻量级启动器,简化了设置和配置,使得集成RabbitMQ变得非常便捷。 首先,让我们了解这三种模式的基本概念: 1. **Direct模式**: Direct模式是最简单的模式,类似于邮局的信件分发。...

    springboot+rabbitmq

    2. 主题模式(Topic Mode):主题模式扩展了队列模式,允许使用通配符订阅多个队列。生产者发送的消息包含一个路由键,消费者根据这个键来订阅消息。这种模式适用于一对多的通信,例如,不同的事件类型可以映射到...

    springboot+rabbitmq实现延时队列

    本教程将详细介绍如何使用SpringBoot集成RabbitMQ来实现一个延时队列,并探讨消息发送与消费确认机制以及消费者端的策略模式应用。 首先,SpringBoot是Java开发者广泛使用的快速开发框架,它简化了Spring的配置和...

    springboot-rabbitmq.zip

    在SpringBoot中,配置一个Fanout交换器,不设置路由键,然后创建一个或多个队列绑定到这个交换器,即可实现广播效果。 3. **Direct模式**:直接模式基于路由键(Routing Key)匹配来决定消息发送到哪个队列。生产者...

    spring-boot集成RabbitMQ

    **Spring Boot 集成 RabbitMQ 知识点详解** Spring Boot 是一款基于 Spring ...在实际项目中,还可以根据业务需求,使用更多的 RabbitMQ 功能,如工作队列、发布/订阅模式、路由键策略等,以优化系统架构和提高性能。

    Springboot核心技术栈(附Demo源码).zip

    Springboot集成RabbitMQ Springboot 定时任务 Springboot邮件发送 Springboot 集成MongoDB springboot框架本身的一个原因,现在企业中使用springboot越来越多,企业对于求职者对springboot框架的学习程度要求越来越...

Global site tag (gtag.js) - Google Analytics