2017-07-08 13 views
0

私は公式のドキュメントからRPCパターンについて読んだことがありますが、例は本当に簡単です。クライアントはreply_toおよびcorrelation_idプロパティーを持つメッセージを送信し、サーバーはキューからメッセージを取得し、同じcorrelation_idをバインドしてクライアントに再送信します。RPCパターンの問題

私の質問は以下のとおりです。

1)サーバがオフにされた場合にどのような、クライアントが応答を取得する方法であれば、クライアント側

3)にRPCのタイムアウトを設定する方法

2)サーバーが壊れて例外がスローされました。この例外をクライアントに送信すると、

私はどんな回答にも感謝します。

答えて

1
  1. RPCコールの応答にサーバーを設定することをお勧めします。 (Pythonのセクションで)RabbitMQ docsで説明し、このような何か:

    可能性は低いものの、RPCサーバーはちょうど私達に答えを送信した後に死んでしまうことがありますが、要求に対する確認メッセージを送信する前に。その場合、再起動したRPCサーバーは要求を再度処理します。そのため、クライアントでは重複した応答を適切に処理する必要があり、RPCは理想的には冪等でなければなりません。

  2. あなたは、メッセージまたはキュー全体のためのTTLを設定することができます。https://www.rabbitmq.com/ttl.html

  3. それは依存しています。要求が冪等でない場合、メッセージを確認しないでください - 他のワーカーが処理します。しかし、それは毒薬になる可能性があります。そのような要求はRPCキューをいっぱいにし、DoSを引き起こします。たとえば、retry_countヘッダーを使用して手動で処理することができます(デクリメントされたカウンターを使用した失敗ワーカーのキュー待ち行列メッセージの場合)

関連する問題