2017-03-20 13 views
1

を購読私はので、私は「foo」という件名に任意のメッセージを公開するたびに、それを受信して​​いるいくつかの時間といくつかの時間、次のようにNATSはLANGキューのサブスクライバクライアントを行くGO LANG NATSキューイングは

nc.QueueSubscribe("foo", "my_queue", func(msg *nats.Msg) { 
     log.Printf("Message :%s", string(msg.Data)) 
}) 

を作成していますない。

たとえば、「foo」の件名の上に10個のメッセージを送信した場合、2〜3件の最大件数が送信されます。

次のように私の要件は、キューのサブスクリプションがあるはず、

  • です。
  • すべての入力イベントを処理する必要があります。
  • キューを同時実行モードで登録する方法。

助けてください。

答えて

4

複数のキュー・サブスクライバ(同じ例ではmy_queue)を起動すると、「foo」にパブリッシュされたメッセージは、そのキュー・サブスクライバのうちの1つにのみ移動します。

キューのサブスクライバがメッセージを見逃していることを意味するかどうかはわかりません。 NATSには永続性はありません(NATSストリーミングにはあります)。したがって、の前にのメッセージを発行すると、そのサブスクライバが作成され、そのサブジェクトに他のサブスクライバがない場合、メッセージは失われます。

1つの接続からキューのサブスクライバを試して開始し、同じアプリケーションで別の接続からメッセージを送信している場合は、サーバーがメッセージの受信を開始する前にキューのサブスクリプションを登録していない可能性がありますあなたは2つの接続を使用していました)。その場合は、サブスクリプションを作成した後、送信を開始する前に接続をフラッシュする必要があります:nc.Flush()

最後に、キュー・サブスクライバを並行モードで使用することは特別なことはありません。これは、同じグループに属するサブスクライバの同じサブジェクト上のメッセージの処理をロードバランシングすることです。同じアプリケーション内に複数のキュー・サブスクライバを作成する場合は、メッセージ・ハンドラを共有しないか、そうであれば、メッセージが高速に到着した場合にメッセージ・ハンドラが同時に呼び出されるため、ロックを使用する必要があります十分な。

関連する問題