简介
RabbitMQ是一个消息代理,生产者发送消息到RabbitMQ,RabbitMQ接收、存储、路由消息到队列,消费者从队列接收消息。
RabbitMQ具体如何处理消息与采用的协议有关,以AMQP 0-9-1为例,生产者发布消息到交换机,交换机路由消息到交换机或者队列,可达消息最终到达队列,消费者从队列接受消息。
主要概念
VirtualHost:虚拟主机,实现多租户隔离,默认虚拟主机为/
User:用户,RabbitMQ的用户,默认用户为guest/guest
Message:消息,包含元信息property和内容payload
Producer:生产者,发送消息的用户程序,用户程序可以同时作为生产者和消费者
Consumer:消费者,接受消息的用户程序,用户程序可以同时作为生产者和消费者
Queue:队列,存储消息,无默认队列
Exchange:交换机,路由消息,默认交换机为空字符串""标识的交换机
对比
- 异步。同步状态下支付服务与订单服务、仓储服务、短信服务等位于同一调用链,需要所有完成才能返回最终结果完成一次完成调用。使用消息队列可以拆分调用链,支付服务与其他服务不在同一调用链。调用链变短提高了接口吞吐量。
- 解耦。服务间没有强依赖,没有级联关系。
- 削峰。流量突发由消息队列作为缓冲垫。
同步调用
- 优点
- 链路直观
- 直接返回调用结果
- 缺点
- 耦合程度高
- 链路长
- 链路中关键操作容易级联失败
异步调用
- 优点
- 吞吐量提升
- 耦合度低
- 故障隔离
- 流量削峰
- 缺点
- 调用链短而杂,没有明显流程线,不好追踪管理
- 依赖于broker的可靠性、安全性
相关资料
官方文档:https://www.rabbitmq.com/docs
Release Information:
Install and Upgrade:https://www.rabbitmq.com/docs/download
AMQP协议:https://www.rabbitmq.com/tutorials/amqp-concepts
Spring AMQP
Spring AMQP是基于AMQP定义的API规范,提供了模板来发送和接收消息。其包含两部分,其中spring-amqp是基础抽象,spring-rabbit是底层默认实现。Spring AMQP中消息的序列化和反序列化使用MessageCOnverter实现,默认是JDK序列化,注意发送方与接收方必须使用相同的MessageConverter。