SpringBoot集成常用第三方框架-RabbitMQ

作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

一、RabbitMQ 概述

RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。

RabbitMQ官方地址:RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQ

RabbitMQ提供了6种模式:简单模式,work模式,Publish/Subscribe发布与订阅模式,Routing路由模式,Topics主题模式,==RPC远程调用模式==(远程调用,不太算MQ;暂不作介绍);

官网对应模式介绍:RabbitMQ Tutorials — RabbitMQ

SpringBoot集成常用第三方框架-RabbitMQ

1.1 RabbitMQ简介

AMQP,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年,AMQP 规范发布。类比HTTP。

SpringBoot集成常用第三方框架-RabbitMQ

2007年,Rabbit 技术公司基于 AMQP 标准开发的 RabbitMQ 1.0 发布。RabbitMQ 采用 Erlang 语言开发。Erlang 语言由 Ericson 设计,专门为开发高并发和分布式系统的一种语言,在电信领域使用广泛。

RabbitMQ 基础架构如下图:

SpringBoot集成常用第三方框架-RabbitMQ

1.2 RabbitMQ 中的相关概念

Broker:接收和分发消息的应用,RabbitMQ Server就是 Message Broker

Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个vhost,每个用户在自己的 vhost 创建 exchange/queue 等 Connection:publisher/consumer 和 broker 之间的 TCP 连接

Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的 channel 进行通讯,AMQP method 包含了channel id 帮助客户端和message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销

Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到queue 中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)

Queue:消息最终被送到这里等待 consumer 取走

Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key。Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据

二、Spring Boot整合RabbitMQ

2.1. 整合RabbitMQ简介

在Spring项目中,可以使用Spring-Rabbit去操作RabbitMQ GitHub – spring-projects/spring-amqp: Spring AMQP – support for Spring programming model with AMQP, especially but not limited to RabbitMQ

尤其是在spring boot项目中只需要引入对应的amqp启动器依赖即可,方便的使用RabbitTemplate发送消息,使用注解接收消息。

一般在开发过程中

生产者工程:

  1. application.yml文件配置RabbitMQ相关信息;

  2. 在生产者工程中编写配置类,用于创建交换机和队列,并进行绑定

  3. 注入RabbitTemplate对象,通过RabbitTemplate对象发送消息到交换机

消费者工程:

  1. application.yml文件配置RabbitMQ相关信息

  2. 创建消息处理类,用于接收队列中的消息并进行处理

2.2. 搭建生产者工程

2.2.1. 创建工程

创建生产者工程springboot-rabbitmq-producer

2.2.2. 添加依赖

修改pom.xml文件内容为如下:


    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.4.RELEASE
    
    com.
    springboot-rabbitmq-producer
    1.0-SNAPSHOT
​
    
        
            org.springframework.boot
            spring-boot-starter-amqp
        
        
            org.springframework.boot
            spring-boot-starter-test
        
    

2.2.3. 启动类

package com..rabbitmq;
​
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​
@SpringBootApplication
public class ProducerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class);
    }
}
​

2.2.4 配置RabbitMQ

创建application.yml,内容如下:

spring:
  rabbitmq:
    host: 192.168.6.141
    port: 5672
    virtual-host: /
    username: guest
    password: guest

2.2.5 绑定交换机和队列

创建RabbitMQ队列与交换机绑定的配置类 RabbitMQConfig

​
@Configuration
public class RabbitMQConfig {
        public static final String EXCHANGE_NAME = "boot_topic_exchange";
        public static final String QUEUE_NAME = "boot_queue";
​
        // 1 交换机
        @Bean("bootExchange")
        public Exchange bootExchange(){
            return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
        }
        //2.Queue 队列
        @Bean("bootQueue")
        public Queue bootQueue(){
            return QueueBuilder.durable(QUEUE_NAME).build();
        }
        //3. 队列和交互机绑定关系 Binding
    /*
        1. 知道哪个队列
        2. 知道哪个交换机
        3. routing key
        noargs():表示不指定参数
     */
        @Bean
        public Binding bindQueueExchange(@Qualifier("bootQueue") Queue queue,
                                         @Qualifier("bootExchange") Exchange exchange){
            return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs();
        }
}
​

2.2.5 运行测试

@SpringBootTest
class SpringbootRabbitmqProducerApplicationTests {
​
​
    @Autowired
    private RabbitTemplate rabbitTemplate;
​
    /**
     * 第一个参数:交换机名字
     * 第二个参数:routingKey
     * 第三个参数:发送的消息
     */
    @Test
    public void testSend(){
        rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME,"boot.haha","mq hello");
    }
​
}

2.3. 搭建消费者工程

2.3.1. 创建工程

创建消费者工程springboot-rabbitmq-consumer

2.3.2. 添加依赖

修改pom.xml文件内容为如下:


    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.4.RELEASE
    
    com.
    springboot-rabbitmq-consumer
    1.0-SNAPSHOT
​
    
        
            org.springframework.boot
            spring-boot-starter-amqp
        
    
​

2.3.3. 启动类

package com..rabbitmq;
​
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class);
    }
}

2.3.4. 配置RabbitMQ

创建application.yml,内容如下:

spring:
  rabbitmq:
    host: 192.168.6.141
    port: 5672
    virtual-host: /
    username: guest
    password: guest

2.3.5. 消息监听处理类

编写消息监听器com.huidian.rabbitmq.listener.MyListener

@Component
public class MyListener {
​
    /**
     * 监听某个队列的消息
     * @param message 接收到的消息
     */
    @RabbitListener(queues = "boot_queue")
    public void myListener1(String message){
        System.out.println("消费者接收到的消息为:" + message);
    }
}

2.3.6 测试

三,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

SpringBoot集成常用第三方框架-RabbitMQ

SpringBoot集成常用第三方框架-RabbitMQSpringBoot集成常用第三方框架-RabbitMQ

SpringBoot集成常用第三方框架-RabbitMQ

 SpringBoot集成常用第三方框架-RabbitMQSpringBoot集成常用第三方框架-RabbitMQ

SpringBoot集成常用第三方框架-RabbitMQ

 SpringBoot集成常用第三方框架-RabbitMQ

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/c0cdfb5440.html