RabbitMQ概述
为什么使用MQ
- 流量削峰(削峰就是排队)
- 应用解耦
- 异步处理
- 跨语言开发
- 分布式系统
……
RabbitMQ
RabbitMQ的模式
- 简单模式
- 工作模式
- 发布订阅模式
- 路由模式
- 话题模式
- RPC模式
- 发布确认模式
RabbitMQ是基于AMQP协议,通过使用通用协议就可以做到在不同语言之间传递数据。
AMQP协议
- Server 又称broker,接受客户端连接,实现AMQP实体服务
- Connection 连接和具体broker网络连接
- Channel 网络信道,几乎所有操作都在channel中进行,channel是消息读写的通道,客户端可以建立多个channel,每个channel表示一个会话任务。
- message 消息,服务器和应用程序之间传递的数据
- Virtual host 虚拟主机,用于逻辑隔离,最上层消息的路由。
- Exchange 交换机,接收消息,根据路由键转发消息到绑定的队列上。
- Banding 交换机和消息队列之间的虚拟连接
- Routing Key 一个路由规则,虚拟机根据他来确定如何路由一条消息
- Queue 消息队列
简单模式
RabbitMQ是一个消息代理,接受和转发消息,可以将其视为邮局。
RabbitMQ不处理消息,只是接受、存储和转发二进制数据块——消息。
- 生产无非就是发送,发送消息的程序是生产者
- 队列是位于RabbitMQ中的邮箱的名称,队列本质上是一个大的消息缓冲器。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接受数据。
- 消费者主要是等待接收消息。
简单模式测试案例
<dependencies>
<!-- rabbitmq客户端依赖 -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.9.0</version>
</dependency>
<!-- 操作文件流依赖 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency