(本实例都是使用的Net的客户端,使用C#编写)

  在第二个教程中,我们学习了如何使用工作队列在多个工作实例之间分配耗时的任务。

  但是,如果我们需要在远程计算机上运行功能并等待结果怎么办? 那是一个不同的故事。 此模式通常称为远程过程调用或RPC。

  在本教程中,我们将使用RabbitMQ构建一个RPC系统:一个客户机和一个可扩展的RPC服务器。 由于我们没有任何值得分发的耗时任务,我们将创建一个返回斐波纳契数字的虚拟RPC服务。

1、客户端接口【Client Interface】

  为了说明如何使用RPC服务,我们将创建一个简单的客户端类。 它将公开一个名为call的方法,该方法发送RPC请求并阻塞,直到接收到答案:

photoshop培训,电脑培训,电脑维修培训,移动软件开发培训,网站设计培训,网站建设培训

var rpcClient = new RPCClient();

Console.WriteLine(" [x] Requesting fib(30)");var response = rpcClient.Call("30");
Console.WriteLine(" [.] Got '{0}'", response);

rpcClient.Close();

photoshop培训,电脑培训,电脑维修培训,移动软件开发培训,网站设计培训,网站建设培训


   关于RPC的注释

   虽然RPC是一个很常见的计算模式,但它经常被批评。 当系统出现问题的时候,程序员不知道函数调用是本地函数还是缓慢的RPC调用,这样的混乱导致了系统的不可预测性,并增加了调试的复杂性。 滥用RPC可能导致代码的可维护性很差,这样的设计不但没有简化软件,而且只会是系统更糟。

   铭记这一点,请考虑以下建议:

     确保显而易见哪个函数调用是本地的,哪个是远程的。
     记录您的系统。 使组件之间的依赖关系清除。
     处理错误情况。 当RPC服务器停机很长时间后,客户端应该如何反应?

    当有疑问避免RPC。 如果可以的话,您应该使用异步管道 - 而不是类似RPC的阻塞,将异步推送到下一个计算阶段。

2、回调队列【Callback queue】
  
   一般来说RPC对RabbitMQ来说很容易。 客户端发送