使用rabbitmq-c实现RPC是否有标准方案?
关于librabbitmq-c实现RPC的相关问题解答
1. 关于amq_simple_rpc、amq_simple_rpc_decoded的用途说明
这两个方法不能用于自定义业务RPC场景。它们是librabbitmq-c的内部工具函数,仅用于客户端和RabbitMQ broker之间的AMQP协议层控制信令交互,比如创建队列、声明交换机这类底层控制请求都是通过这两个方法发送。
如果强行挪用做业务层跨客户端RPC会有大量问题:接口参数绑定AMQP协议内部结构,无法兼容自定义业务参数;走内部控制通道会干扰客户端和broker的正常通信;同步阻塞设计性能极低,完全不符合业务RPC的使用要求。
2. 复刻Python官方RPC教程的思路合理性
你的思路完全合理,这也是librabbitmq-c实现业务RPC的标准方案。
RabbitMQ的RPC模式本身是语言无关的,核心逻辑就是依赖amq_basic_properties自带的correlation_id做请求-响应匹配、reply_to字段传递回调队列地址,这套逻辑不受编程语言和SDK限制。你完全可以按照Python版本教程的流程,转写为C语言实现:
- 客户端侧:生成唯一的
correlation_id,声明专属排他回调队列,发布请求时把correlation_id和回调队列名写入消息属性,监听回调队列直到收到对应correlation_id的响应消息。 - 服务端侧:监听业务请求队列,收到请求后执行对应逻辑,将结果发布到请求消息
reply_to指定的队列,同时携带和请求一致的correlation_id即可。
3. 路由式RPC的实现方案
librabbitmq-c没有官方封装的路由式RPC组件,你可以基于官方教程的基础逻辑扩展实现:把原有的直连请求队列替换为direct/topic类型的交换机,客户端请求时携带对应业务维度的routing key,服务端根据自身承载的业务能力绑定对应的routing key即可实现路由分发逻辑,和其他语言的实现逻辑没有差异。
内容的提问来源于stack exchange,提问作者Lorah Attkins
相关产品推荐
相关产品推荐

