# 9. RabbitMQ 实战外卖后端系统

image-20210319171402317

核心思想:

  • AMQP 协议直接定义了 RabbitMQ 的内部结构和外部行为。
  • 使用 RabbitMQ 本质上就是在使用 AMQP 协议。
  • 发送者不能直接将消息发送给最终队列,必须发给交换机。
  • 消息根据路由规则和交换机转发给队列。
  • 消费者从队列将消息取走。
  • 交换机数量不宜过多,一般来说同一个业务,或者同一类业务使用同一个交换机。
  • 合理设置队列数量,一般来说一个微服务监听一个队列,或者一个微服务的一个业务监听一个队列。
  • 合理配置交换机类型,使用 Topic 模式时仔细设置 binding key。
  • 尽量使用自动化配置,将创建交换机/队列的操作固化在应用代码中,免去复杂的运维操作,高效且不易出错。
  • 一般来说,交换机由双方同时声明,队列由接收方声明并配置绑定关系。
  • 交换机/队列的参数一定要由双方开发团队确认,否则重复声明时,若参数不一致会导致声明失败。

# 9.1 需求分析

# 9.1.1 需求分析

  1. 一个外卖后端系统,用户可以在线下单外卖。
  2. 用户下单后,可以实时查询订单进度。
  3. 系统可以承受短时间的大量并发请求。

# 9.1.2 架构设计

  1. 使用微服务系统,组件之间充分解耦。

    微服务架构即是将应用程序构建为松耦合的、可独立部署的一组服务。

    服务:一个单一的、可独立部署的软件组件,实现了一些有用的功能。

    松耦合:封装服务的实现细节,通过 API 调用。

  2. 使用消息中间件,解耦业务逻辑。

  3. 使用数据库,持久化业务数据。

# 如何拆分微服务?
1. 根据系统操作进行微服务拆分。
2. 根据业务能力进行微服务拆分。(推荐使用)
3. 根据子域进行微服务拆分。

# 9.1.3 微服务拆分

image-20210320150437002
  • 订单获取和履行 —— 订单微服务
  • 供应商和产品管理 —— 商家微服务
  • 送餐、骑手管理 —— 骑手微服务
  • 记账与结算 —— 结算微服务
  • 积分管理 —— 积分微服务

# 9.1.4 业务流程

image-20210320150530694

# 9.1.5 接口需求

  1. 新建订单
  2. 查询订单
  3. 接口采用 RestFul 风格

# 9.1.6 数据库设计

  1. 每个微服务使用自己的数据库(至少是自己的一个数据表)。
  2. 不要使用外键,对于数据量非常少的表慎用索引。

image-20210320151022361

上次更新: 8/28/2022, 11:43:26 PM