知识卡片

RPC模式的两个关键字段

专业/工作 · 592.e

内容

在异步的消息系统上实现同步语义的RPC,需要解决两个问题:响应往哪里送、响应属于哪个请求。做法是让每个客户端维护一个回调队列,用消息属性中的replyTo字段告诉服务端把结果发到这个队列,再用correlationId给每个请求分配唯一标识,服务端处理完把这个标识原样带回响应里,客户端凭它把响应匹配回对应的请求。若回调队列收到未知correlationId的消息,直接丢弃即可,因为这通常意味着请求方已经因超时或重启而不再关心这条响应。发散:这套”目的地+关联ID”组合,是几乎所有构建在异步通道之上的请求-响应模拟层的通用模式,本质是把TCP连接自带的请求响应配对关系,用应用层字段重新显式表达出来。

参考来源

《RabbitMQ实战指南》第4章《RabbitMQ进阶》