基本构成
Producing + Queue + Consuming
工作队列
round-robin 循环分配
- 不看接收端剩余的消息,只是轮流分配
- 可限制接收端的容量,如果已有足够多的消息则不分配过去
Message acknowledgment 接到收回执再删除 Queue 中的消息
Message durability MQ 重启消息也还在
- 从缓存写到磁盘还需要时间,无法保证一定不丢
- 通过 publisher confirms 保证不丢
发布订阅
Exchanges
- 发送端不直接发到 Queue,而是发给 Exchange
- 由 Exchange 处理消息
- fanout 广播到所有 Queue
- “” 代表使用默认的 Exchange
发送端新建 Exchange,接收端绑定 Queue 和 Exchange
Routing
direct exchange 根据 routing key 判断如何转发
发送端发消息和接收端做绑定时指定 key
小知识点
void Main(string[] args) 中 args 的意义:
运行指令:dotnet run warning error
args = [warning, error];
Topics
- topic exchange 依据一组 routing key(. 分隔)判断转发
- 单独使用 # -> fanout exchange
-
RPC (Remote procedure call)
每个客户端一个 Queue 用于接收 remote 响应
- 通过 Correlation Id 关联请求与响应
- 客户端新建接收(replyto)Queue,remote 端向这里发响应
小知识点
RPC 的用法需要注意
- 分清调用的是 local 还是 remote 服务
- 记录文档,组件间依赖保证清晰
-
小知识点·改
如果一个远程服务器都没有怎么处理
- 怎么处理远程服务器响应超时
- 远程服务器报错了,如何传给客户端,如何处理
- 在接收 Queue 中筛选掉不合法的消息
Publisher Confirms
- 直接等待 Confirms,同步执行
- 批量发送消息等待 Confirms,出错时难定位来源,同步执行
- 异步地处理,可用字典类型暂存消息编号和消息内容