0
私はオンラインでRPCサーバーを実行していないサーバーにRPC呼び出しを行うと、どのように処理を進めるのか検索しています。オフラインRPCサーバーへのRPC呼び出しの試行方法
私のコードで行っているのは、サーバーが実行しているかどうかを確認するためにフェールオーバーIPアドレスをpingするだけですが、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を読むが、それは複雑に見える:) –