2017-09-24 10 views
0

既存のmsgベースのソフトウェアを移行するためにNATSを評価しています msgタイムアウト例外とオーバーロードに関するドキュメントが見つかりませんでした。例については :タイムアウト時にNats.io QueueSubscribeの動作が発生する

  • 加入者がを選択しされた後、それは出版社によって投稿タイムアウト設定を認識しますか?追加の時間延長を通知することは可能ですか?
  • 選出加入者がいくつかのDBMS接続が行方不明であり、メッセージに

NATSサーバーをバウンスすることは可能かもしれ完了できないことを認識している場合は意志ピックアップ別の加入者と同じメッセージポストを再でしょうか?

チャオ サンディエゴ

+0

NATS Streaming Serverにもキューがあり、* ManualAck *という名前のオプションと再配信の動作があります(https://github.com/nats-io/nats-streaming-server/issues/186を参照)。 ) –

答えて

1

あなたの最初の質問については:あなたが(nc.Requestを使用して)、タイムアウトで要求メッセージを公開しようとしているように私には思えます。その場合、タイムアウトはクライアントによって管理されます。効果的に、クライアントは要求メッセージを発行し、応答サブジェクトにサブスクリプションを作成します。サブスクリプションがタイムアウト内にメッセージを受け取らない場合は、タイムアウト条件を通知し、返信サブジェクトから退会します。

2番目の質問では、キューグループを使用していますか? NATSのキューグループは、キューグループ名を指定するサブスクリプションです。同じキュー・グループ名を持つすべてのサブスクリプションは、サーバーによって特別に扱われます。サーバは、メッセージが到着すると、その間に回転するようにメッセージを送信するために、キューグループ購読の1つを選択します。ただし、サーバーの責任は単にメッセージを配信することです。

タイムアウトと最大数1のメッセージを使用して、要求/応答を使用して機能を実装してください。タイムアウト後に応答がない場合、クライアントは何らかの遅延や要求メッセージを再送信できます。他のタイプの回復ロジックを実行します。返信メッセージは、メッセージが適切に処理されたことを知るための「プロトコル」でなければなりません。これがメッセージングアーキテクチャの設計に反映されることに注意してください。たとえば、要求受信者がメッセージを受信して​​処理した後で、クライアントまたはサーバーが応答を公開する前に、タイムアウトが発生する可能性があります。その場合、要求送信者はその差異を知ることができず、最終的に再発行することになります。これは、そのようなタイプの相互作用が重複した副作用を防ぐために要求を冪等価にする必要があることを示唆しています。

+1

また、NATSストリーミングはまったく別のものです。 NATSストリーミングサーバは、ログ内のすべてのメッセージをキャプチャします。 NATSストリーミングサーバは、ログをNATSストリーミング加入者に再生します。 NATSと同様に、サブスクライバはキューグループのメンバーになり、ログ内のメッセージはキューグループメンバー間で分散されます。 –

+0

お寄せいただきありがとうございます!あなたの最終的な文章に同意します:_...重複した副作用を防ぐために要求が等しくなるようにしてください._これは、現在のpub/subアーキテクチャ内でコード化しなければならなかったコードのちょうど重要な部分です。私は簡単なNATSのパブのサブに私のテストenvをクローンし、私はすべての回復シナリオを再テストします。 –

関連する問題