基本构成

Message Queue - 图1
Producing + Queue + Consuming

工作队列

Message Queue - 图2
round-robin 循环分配

  • 不看接收端剩余的消息,只是轮流分配
  • 可限制接收端的容量,如果已有足够多的消息则不分配过去

Message acknowledgment 接到收回执再删除 Queue 中的消息
Message durability MQ 重启消息也还在

  • 从缓存写到磁盘还需要时间,无法保证一定不丢
  • 通过 publisher confirms 保证不丢

发布订阅

Message Queue - 图3
Exchanges

  • 发送端不直接发到 Queue,而是发给 Exchange
  • 由 Exchange 处理消息
  • fanout 广播到所有 Queue
  • “” 代表使用默认的 Exchange

发送端新建 Exchange,接收端绑定 Queue 和 Exchange

Routing

image.png Message Queue - 图5
direct exchange 根据 routing key 判断如何转发
发送端发消息和接收端做绑定时指定 key
小知识点
void Main(string[] args) 中 args 的意义:
运行指令:dotnet run warning error
args = [warning, error];

Topics

Message Queue - 图6

  • topic exchange 依据一组 routing key(. 分隔)判断转发
  • 单独使用 # -> fanout exchange
  • 不适用 * 和 # -> direct exchange

    RPC (Remote procedure call)

    Message Queue - 图7

  • 每个客户端一个 Queue 用于接收 remote 响应

  • 通过 Correlation Id 关联请求与响应
  • 客户端新建接收(replyto)Queue,remote 端向这里发响应

    小知识点

    RPC 的用法需要注意
  1. 分清调用的是 local 还是 remote 服务
  2. 记录文档,组件间依赖保证清晰
  3. 准备错误应对方案

    小知识点·改

  4. 如果一个远程服务器都没有怎么处理

  5. 怎么处理远程服务器响应超时
  6. 远程服务器报错了,如何传给客户端,如何处理
  7. 在接收 Queue 中筛选掉不合法的消息

Publisher Confirms

  • 直接等待 Confirms,同步执行
  • 批量发送消息等待 Confirms,出错时难定位来源,同步执行
  • 异步地处理,可用字典类型暂存消息编号和消息内容