文章目录
- 同步调用和异步调用
- MQ
- RabbitMQ
- 1. RabbitMQ控制台实现交换机路由到队列
- 1.1 创建队列
- 1.2 将消息发送给交换机,是否会到达队列
- 2. RabbitMQ控制台实现数据隔离
- 2.1 添加一个用户
- 2.2 创建新的虚拟主机

同步调用和异步调用
同步调用是指完成一个功能,其内部有多个任务,要一直等待这几个任务全都完成后,才算这个功能的结束。
e.g 比如,在登录的时候,原本只需要校验用户名和密码,但需求说的是,还需要给用户发一条短信,或者还需要给用户加积分之类的。如果是同步的话,那么用户登录就不仅仅是校验用户名和密码,还要一直等待成功发送短信或加完积分后,才能进入网页。
这样,用户等待时间较长,性能就比较差。
异步调用是指只完成必要的任务,其余任务交给消息代理,由消息代理去慢慢通知消息处理方处理,用户就不需要一直等待,把任务通知给消息代理即可。
优点:性能较好,无需等待;缓存消息,流量削峰填谷。
缺点:不能立即调用结果;不确定后序任务时候执行成功;依赖于消息代理的可靠性。
MQ
MQ(MessageQuque):消息队列,存放消息的一种队列。
常见:RabbitMQ、RocketMQ、Kafka、ActiveMQ。
RabbitMQ | RocketMQ | Kafka | ActiveMQ | |
---|---|---|---|---|
公司 | Rabbit | 阿里 | Apache | Apache |
开发语言 | Erlang | Java | Scala&Java | Java |
协议支持 | AMQP, XMPP, SMTP, STOMP | 自定义协议 | 自定义协议 | OpenWrite, STOMP, REST, XMPP, AMQP |
可用性 | 高 | 高 | 高 | 一般 |
单机吞吐量(QPS) | 一般 | 高 | 非常高 | 差 |
消息延迟 | 微妙级 | 毫秒级 | 毫秒以内 | 毫秒级 |
消息可靠性 | 高 | 高 | 一般 | 一般 |
RabbitMQ 的延迟性最好(微秒级),Kafka 的吞吐量最高(百万级别的 QPS)。
RabbitMQ
publisher(消息发送者)、exchange(交换机)、queue(队列)、consumer(消息消费者)、virtual-host(虚拟主机)
消息模型:
消息发送者将消息发送给交换机,交换机路由到队列,消费者监听队列。
为什么有 virtual-host 的存在 ?
一个公司中不同项目使用同一套 MQ 的服务,那这样不同项目的交换机和队列就可能会有冲突。所以就像数据库一样,每个项目有自己的 virtual-host,不同的 virtal-host 有不同的交换机和队列,那么不同的 virtual-host 内的队列和交换机就不会产生影响。 —— 数据隔离作用
1. RabbitMQ控制台实现交换机路由到队列
1.1 创建队列
1.2 将消息发送给交换机,是否会到达队列
交换机绑定队列:
绑定后,点击绑定的队列,可以看到:
模拟交换机接受消息和路由消息:
发送后,交换机显示:
发送后,队列 hello.que1 中:
交换机负责路由和转发消息,本身不具备存储消息的能力。
2. RabbitMQ控制台实现数据隔离
2.1 添加一个用户
可以看到,此时新增的用户是没有虚拟主机的:
点击退出登录后,使用刚刚新创建的用户登录:
此时没有虚拟主机,无法进行任何的操作的。
2.2 创建新的虚拟主机
查看当前用户的虚拟主机:
切换至刚刚创建的虚拟主机下,就不存在之前创建的队列了:
不同虚拟主机下的交换机:
一般,不同的项目就创建不同的虚拟主机,保证数据的隔离