`
guibin
  • 浏览: 366272 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于AMQP实现RPC(Remote Procedure Call)的设计

    博客分类:
  • AMQP
阅读更多
基于AMQP实现RPC(Remote Procedure Call)的设计
guibin.beigjing@gmail.com

首先回忆一下RPC的过程。客户端将请求发送给服务器端,服务器端处理完毕之后将结果返回给客户端。那么在AMQP之上,如何实现RPC呢?客户端应当将请求publish给服务器端,服务器处理完毕之后,再将结果publish回给客户端。在这过程中有两次publish,显然应该是不同的publish。服务器端publish的消息,客户端不应该收到更不应该消费;给客户端publish的结果消息,应该只有客户端能收到;并且对于每次请求和相应,都应该有一组唯一的标识,标识并匹配相应的一对请求和响应,防止由于多次请求而收到多次响应,混淆了请求和响应之间的对应关系。

基于AMQP实现RPC的逻辑如下图所示:


  • 服务器S提前建好一个专门接受来自客户端RPC请求的队列rpc_queue,并且客户端知道如何向此队列publish消息的rountingKey。通常情况下会建立一个和该接受请求的队列同名的rountingKey,并和该rpc_queue绑定。这样客户端向rountingKey发送请求后,服务器端就能收到请求了。
  • 当客户端C启动的时候,生成一个匿名的、排他的、自动删除的回调队列(an anonymous, exclusive and auto delete callback queue),用来接受来自服务器端的响应。
  • 对于一个PRC请求而言,客户端发送的消息必须包含两个属性“ reply_to”和“ correlation_id”。“reply_to”用来告诉服务器端计算后的结果发送到哪个rountingKey,“correlation_id”用做每个请求的唯一标识,以区分不同请求和不同响应。
  • 客户端C将请求publish到rpc_queue,图中上面从左向右的过程。
  • 服务器端S在监听队列rpc_queue,收到了来自客户端的请求之后,处理并得到结果,将结果包装成响应消息,publish给“reply_to”。
  • 客户端C一直在监听“reply_to”队列,收到了结果消息后,取到消息中的属性“correlation_id”值,如果这个“correlation_id”和之前记录的请求的“correlation_id”相匹配,则确认这个响应是有效的,并将结果返回给调用者。

基于此设计,用Scala+RabbitMQ的实现源代码,请参考AIOTrade中的lib.amqp包下的RpcClient.scalaRpcServer.scala

参考文献:
http://www.rabbitmq.com/tutorial-six-python.html
http://www.infoq.com/articles/AMQP-RabbitMQ

Guibin
2011-02-20
  • 大小: 14.4 KB
1
1
分享到:
评论

相关推荐

    开源项目-vibhavp-amqp-rpc.zip

    开源项目-vibhavp-amqp-rpc.zip是一个聚焦于AMQP协议的RPC(Remote Procedure Call)实现,专为Go语言的net/rpc库设计。这个项目由vibhavp开发并分享,旨在提供一个高效、可靠的远程过程调用框架,通过AMQP消息...

    rabbitmq学习11:基于rabbitmq和spring-amqp的远程接口调用

    在IT行业中,远程接口调用(Remote Procedure Call, RPC)是一种常见的通信机制,它允许一个程序调用另一个位于不同网络位置的程序的功能,就像是在本地执行一样。在本主题"rabbitmq学习11:基于rabbitmq和spring-...

    RPC的简单实现

    RPC(Remote Procedure Call)是一种计算机通信协议,允许一个程序在某个网络中的一个计算机上执行远程操作,就像它在本地执行一样。本篇文章将探讨RPC的基本原理、实现方式以及其在IT领域的应用。 **1. RPC的基本...

    基于rabbitmq的rpc调用的3中方式实战-rabbitmq-rpc.zip

    在本实战教程中,我们将探讨基于 RabbitMQ 的远程过程调用(RPC,Remote Procedure Call)的三种实现方式。 1. **基于工作者模式的RPC** 在这种模式下,客户端发送请求到RabbitMQ的特定交换器,然后这个请求被路由...

    RabbitMQ 实现类似Dubbo的RPC调用.rar

    在分布式系统中,RPC(Remote Procedure Call)是一种常见的通信机制,允许一个程序调用另一个位于不同网络节点上的程序,就像调用本地函数一样简便。在Java领域,Dubbo是一款广泛使用的RPC框架,它提供了高性能、...

    rpc的简单实现.docx

    RPC(Remote Procedure Call)是一种进程间通信机制,允许程序调用另一个远程计算机上的函数或方法,就像调用本地函数一样。在本示例中,RPC的实现基于Java,利用了反射、动态代理以及Socket进行通信。 1. **基础...

    重构的RPC方法库,使用java反射进行方法调用,使用fastjson进行数据序列化,支持多RPC服务的负载均衡

    在IT行业中,RPC(Remote Procedure Call)是一种分布式计算技术,允许程序在不同的计算机上通过网络进行通信,就像调用本地函数一样。这个压缩包文件"rabbitmq-rpc-master"似乎是一个基于Java实现的RPC框架,它经过...

    rpcsoa服务化2

    RPC(Remote Procedure Call)远程过程调用和SOA(Service-Oriented Architecture)面向服务架构是IT行业中两种重要的服务化技术,它们为分布式系统提供了强大的支撑。 RPC是一种协议,允许一个程序在执行过程中...

    org.jflux.impl.transport.qpid-0.1.4.zip

    在现代软件开发中,远程过程调用(Remote Procedure Call, RPC)是一种常见的技术,它允许程序调用运行在不同网络环境中的另一程序的功能,从而实现分布式系统间的通信。Spring框架,作为一个广泛使用的Java企业级...

    rabbitmq-rpc-consumer-go:用于RabbitMQ RPC的Go模块(消费者)

    RPC(Remote Procedure Call)允许一个程序调用另一个在不同地址空间的程序,而无需理解底层网络协议。在RabbitMQ中,这个概念被实现为一种消息模式,其中客户端发送请求,服务器处理请求并返回响应。 首先,让我们...

    java后端学习笔记

    包括消息队列(Message Queuing)服务如ActiveMQ和RabbitMQ、工作流引擎Activity、容器化技术Docker、分布式服务框架Dubbo、网络库Netty、RPC(Remote Procedure Call)、微服务框架Spring Cloud以及分布式协调服务...

    micro-api-handler-rpc

    **RPC(Remote Procedure Call)** RPC是一种允许一个程序调用另一个在网络另一端的程序的方法,就像调用本地程序一样。在"micro-api-handler-rpc"中,可能使用了Go的RPC库来实现服务间的远程调用,使得服务间通信...

    rabbitmq.net各种实例

    3. **应答(RPC,Remote Procedure Call)模式**:在.NET中,RabbitMQ可以通过回调函数实现客户端的应答机制。生产者发送一个带有唯一ID的消息,消费者接收到消息后处理并返回结果,生产者通过监听特定的响应队列来...

    RabbitMQ.demo

    在这个DEMO中,我们可以期待看到如何设置生产者和消费者,以及如何利用RabbitMQ实现RPC(Remote Procedure Call)模式。 RPC是一种使程序能够像调用本地函数一样调用远程服务器上的函数的技术。在RabbitMQ中实现RPC...

    阿里云物联网平台-物联网平台基本概念.pptx

    * RRPC:RPC(Remote Procedure Call)采用客户机/服务器模式 * 物模型:对设备在云端的功能描述,包括设备的属性、服务和事件 * 数据解析脚本:透传格式/自定义数据格式,数据处理 * 服务端订阅:AMQP、MNS * 一型...

    java-消息队列Rabbit各种模式测试用例

    7. **RPC(Remote Procedure Call)** 虽然RabbitMQ本身不支持标准的RPC,但可以通过工作队列模拟RPC。生产者发送请求消息到队列,消费者接收到请求后处理并返回结果,结果再通过另一个队列返回给生产者。 通过...

    阿里云物联网平台-物联网平台基本概念.pdf

    7. RRPC:RPC(Remote Procedure Call)采用客户机/服务器模式。 8. 物模型:对设备在云端的功能描述,包括设备的属性、服务和事件。 9. 数据解析脚本:透传格式/自定义数据格式,数据处理。 10. 服务端订阅:AMQP、...

    RabbitMQ.Client.5.2.0.rar

    8. **RPC(Remote Procedure Call)**:RabbitMQ支持模拟简单的请求-响应模式,通过使用应答(acknowledgments)和专用于回复的队列来实现。客户端发送请求消息,服务端处理后将响应放入特定队列,客户端通过监听该...

    rabbit入门

    9. **RPC(Remote Procedure Call)**:RabbitMQ可以用于实现简单的RPC机制。客户端发送请求消息,服务端处理后返回响应,客户端通过监听一个特殊的响应队列来获取结果。 10. **持久化**:为了保证消息在服务器重启...

    Dubbo+Solr+RabbitMQ实现Solr数据同步 DataSyncParent.zip

    2. **RPC(Remote Procedure Call)**:Dubbo支持多种协议,如HTTP、Hessian、Dubbo等,使得服务调用如同本地方法调用一样简单。 3. **负载均衡**:Dubbo内置了多种负载均衡策略,如随机、轮询、最少活跃调用数等,...

Global site tag (gtag.js) - Google Analytics