Ich suche stundenlang, wie ich vorgehen soll, wenn wir einen RPC-Aufruf an einen Server machen, der online ist, aber den RPC-Server nicht ausführt.Wie versucht man, einen RPC-Aufruf an einen Offline-RPC-Server abzufangen?
Das einzige, was ich in meinem Code tue, ist Ping unserer Failover-IP-Adresse, um zu überprüfen, ob der Server läuft, aber wenn ich einen RPC-Aufruf mit meiner C# -Anwendung mache, stürzt es ab.
die RPC-Aufruf Funktion:
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);
}
}
}
Hat jemand eine Lösung?
PS: RabbitMQ gesteht diese folgenden Probleme nicht lösen zu tun:
Unser Code immer noch ziemlich simpel ist und nicht versucht, komplexere (aber wichtige) Probleme zu lösen, wie:
Wie sollte der Client reagieren, wenn keine Server laufen?
Sollte ein Client eine Art Timeout für den RPC haben?
Danke.
Haben Sie Paxos Fault Tolerant Algorithmus lesen? Wenn nicht, bitte gehen Sie es durch. –
Sorry ... bearbeitet! Ich lese Paxos, aber es sieht kompliziert aus :) –