💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
##Remote procedure call 在第二节,我们学习了怎么使用Work Queues 来分发耗时任务给多个Workder。 但是如果我们需要在远程电脑运行一个 function,我们应该怎么获得result。这种模式通常被称为远程过程调用或RPC。 在这一节,我们会使用RabbitMQ来创建一个RPC system:一个client和一个RPC Server。 ##Client interface 为了阐明RPC service 是怎么使用的,我们会创建一个简单的client类,它会暴露一个方法,名字叫`call`,它会发送一个RPC请求并且阻塞程序,直到answer被接受。 ``` var rpcClient=new RPCClient(); Console.WriteLine(" [x] Requesting fib(30)"); var response=rpcClient.Call("30"); Console.WriteLine(" [.] Got {0}",response); rpcClient.Close(); ``` **A note on RPC** 尽管RPC 是一种很常见的模式,但是它是有争议的。主要问题是:程序不知道函数调用是本地还是一个缓慢的RPC。 ##Callback queue 通常通过该RabbitMQ 实现RPC是很简单的。一个Client发送一个请求信息,一个Server返回响应信息。为了接收这个反馈信息,我们应该发送请求时包含一个callback queue地址。 ``` var corrId = Guid.NewGuid().ToString(); var props = channel.CreateBasicProperties(); props.ReplyTo = replyQueueName; props.CorrelationId = corrId; var messageBytes = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "", routingKey: "rpc_queue", basicProperties: props, body: messageBytes); // ... then code to read a response message from the callback_queue ... ```