目录
[# 开篇](# 开篇)
[1. 初始MQ及类型](#1. 初始MQ及类型)
[2. MQ的架构](#2. MQ的架构)
[2.1 RabbitMQ的结构和概念](#2.1 RabbitMQ的结构和概念)
[2.2 RabbitMQ消息流示意图](#2.2 RabbitMQ消息流示意图)
[3. MQ下载使用](#3. MQ下载使用)
[3.1 Docker下载MQ参考](#3.1 Docker下载MQ参考)
[3.2 进入RabbitMQ](#3.2 进入RabbitMQ)
# 开篇
MessagesQueue 是一个抽象概念,用于描述消息队列系统的一般特性和功能。而 RabbitMQ 是一个具体的消息队列 实现,是开源的、基于 AMQP(高级消息队列协议)的消息代理软件。换句话说,RabbitMQ 是一种消息队列的实现 ,而 MessagesQueue 是消息队列这一概念的抽象表达。
消息队列是一种在应用程序之间传递消息的通信方式,常用于解耦系统组件、异步处理任务、实现负载均衡和削峰填谷等场景。MessagesQueue 这个术语可能用于描述各种消息队列系统,如 RabbitMQ、Kafka、ActiveMQ 等,以及它们之间的通用概念和特性,例如消息的发布与订阅、消息的持久化、消息路由、消息确认机制等。
总之,MessagesQueue 是对消息队列系统的抽象描述,而 RabbitMQ 是其中的一个具体实现。
RabbitMQ介绍
RabbitMQ 是一种分布式消息队列中间件 。它通过在不同的应用程序之间传递消息来实现解耦和异步通信。RabbitMQ基于AMQP(高级消息队列协议)实现,可以在分布式系统中实现可靠的消息传递。它可以在不同的进程、不同的服务器之间进行消息的传递和交换,实现了高可用性、可伸缩性和可靠性。通过使用RabbitMQ,可以将不同的应用程序、服务或者模块进行解耦,提高系统的可扩展性和可维护性。
通讯概念
- 同步通讯:
- 一次只能单人访问,不接受双人访问,就好比手机打电话,一次只能跟一个人通话,下一个人来了,就需要等到第一个人打完电话后,第二个人才能继续通讯。
- 异步通讯:
- 就好比发送的消息,我微信发送一条消息,不需要别人去确认,我还可以给其他人也发送消息,实现多人通知,跟打电话资源被占用不一样,我可以实现异步的通讯。
1. 初始MQ及类型
- MQ (MessageQueue),中文是消息队列,字面来看就是存放消息的队列。也是事件驱动架构中的Broker。
- MQ队列有许多特性不一的队列类型,比如常用的RabbitMQ,Act..,Roc...,kafka
特性 | RabbitMQ | ActiveMQ | RocketMQ | Kafka |
---|---|---|---|---|
公司/社区 | Rabbit | Apache | 阿里 | Apache |
开发语言 | Erlang | Java | Java | Scala & Java |
协议支持 | AMQP, XMPP, SMTP, STOMP | OpenWire, STOMP, REST, XMPP, AMQP | 自定义协议 | 自定义协议 |
可用性 | 高 | 一般 | 高 | 高 |
单机吞吐量 | 一般 | 差 | 高 | 非常高 |
消息延迟 | 微秒级 | 毫秒级 | 毫秒级 | 毫秒以内 |
消息可靠性 | 高 | 一般 | 一般 | 一般 |
2. MQ的架构
2.1 RabbitMQ的结构和概念
- Publisher(生产者) :
- 生产者发送消息到虚拟机里的交换机(Exchange)。
- 发布消息的角色,相当于消息的发送者。
- Exchange(交换机) :
- 交换机接收到生产者发送的消息后,根据某种路由规则将消息发送到一个或多个队列(Queue)。
- Exchange有几种类型,常见的包括:
- Direct Exchange:消息根据具体的路由键被投递到队列。
- Fanout Exchange:消息广播到所有绑定到该交换机的队列。
- Topic Exchange:消息根据通配符匹配路由键被投递到队列。
- Headers Exchange:根据消息头属性进行路由。
- Queue(队列) :
- 队列存储从交换机接收到的消息,直到消费者进行处理。
- 队列有可能被多个消费者并发消费。
- Consumer(消费者) :
- 消费者从队列中获取消息并进行处理。
- 相当于消息的接收者。
- Virtual Host(虚拟主机) :
- 虚拟主机是逻辑上的消息分组,用于多租户和权限管理。
- 一个RabbitMQ Server中可以有多个Virtual Host,每个Virtual Host包含自己的队列、交换机和绑定关系。
- RabbitMQ Server(Broker) :
- RabbitMQ的核心,负责接受、存储、转发消息。
- 管理并维护所有的队列、交换机和虚拟主机。
2.2 RabbitMQ消息流示意图
Publisher -> Exchange -> Queue -> Consumer
- 生产者(Publisher):负责生产和发送消息。
- 交换机(Exchange):根据路由键或其他规则将消息路由到相应的队列。
- 队列(Queue):存储消息,等待消费者取走。
- 消费者(Consumer):从队列中取走并处理消息。
这个架构设计使得RabbitMQ非常适合于解耦和异步处理系统中的消息传递,保证消息的可靠传输和处理。
3. MQ下载使用
3.1 Docker下载MQ参考
ruby
# 1.使用docker查询rabbitmq的镜像
docker search rabbitmq
# 2.安装镜像
docker pull rabbitmq
# 3.运行mq:
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq
3.2 进入RabbitMQ
- 访问地址:http://linuxip:15672
- 登录账号密码默认:guest