【发布时间】:2017-08-21 16:02:12
【问题描述】:
如果我们对在线但不运行 RPC 服务器的服务器进行 RPC 调用,我正在寻找如何继续。
我在我的代码中唯一要做的就是 ping 我们的故障转移 IP 地址以检查服务器是否正在运行,但如果我使用我的 C# 应用程序进行 RPC 调用,它就会崩溃。
RPC 调用函数:
public string Call(string message)
{
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);
while(true)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
if(ea.BasicProperties.CorrelationId == corrId)
{
return Encoding.UTF8.GetString(ea.Body);
}
}
}
有人有解决办法吗?
PS:RabbitMQ 承认没有解决以下问题:
我们的代码仍然非常简单,并没有尝试解决更复杂(但重要)的问题,例如:
如果没有服务器在运行,客户端应该如何反应?
客户端是否应该为 RPC 设置某种超时?
谢谢。
【问题讨论】:
-
你读过 Paxos 容错算法吗?如果没有,请通过它。
-
对不起...已编辑!我读过 Paxos,但它看起来很复杂 :)