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

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

2007年,Rabbit 技术公司基于 AMQP 标准开发的 RabbitMQ 1.0 发布。RabbitMQ 采用 Erlang 语言开发。Erlang 语言由 Ericson 设计,专门为开发高并发和分布式系统的一种语言,在电信领域使用广泛。
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发送消息,使用注解接收消息。
一般在开发过程中:
生产者工程:
-
application.yml文件配置RabbitMQ相关信息;
-
在生产者工程中编写配置类,用于创建交换机和队列,并进行绑定
-
注入RabbitTemplate对象,通过RabbitTemplate对象发送消息到交换机
消费者工程:
-
application.yml文件配置RabbitMQ相关信息
-
创建消息处理类,用于接收队列中的消息并进行处理
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智能应用
基于大数据实现的各类数据管理和推荐系统








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