問題タブ [nsq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - nsq が nsqlookupd に接続してメッセージを消費できない
docker-compose.yml以下のように、docker-compose を使用して nsq を実行しようとしました。
nsq クライアントgo-nsqを使用してメッセージを生成および消費しています。メッセージは nsqd に直接接続して消費できますが、nsqlookupd に接続して消費することはできません。
nsqlookup インスタンスに接続できます。
ソースコードのリンク:
https://gist.github.com/liuzxc/1baf85cff7db8dee8c26b8707fc48799
環境:
これについて何か考えはありますか?
ruby-on-rails - Ruby nsq 新しいメッセージをリッスンする方法
私のセットアップは次のとおりです: 1 つのマイクロサービスは、要求を受け取り、メッセージをキュー (nsq) に書き込みます。2 つ目のマイクロサービスは、キュー内のメッセージを読み取り、それらに基づいて何かを実行する必要があります。
Ruby on Rails の nsq コンセプトは初めてです。ここから nsq をインストールしました: http://nsq.io/overview/quick_start.html。メッセージのプッシュを容易にするために、この gem も使用しました: https://github.com/wistia/nsq-ruby。
メッセージをキューに入れることができました。この部分は簡単でした。
質問:
2 番目のマイクロサービスで常にリッスンして、何かがいつプッシュされたのかを把握して、それを消費できるようにするにはどうすればよいですか?
これは私がメッセージをプッシュする方法です:
java - NSQ でメッセージが遅れたのはなぜですか? 意外ですね……
私は自分のプロジェクトで NSQ を mq として使用しました。Java プロデューサーは NSQ へのメッセージを生成し、コンシューマーに送信します。しかし、奇妙なことに、コンシューマーは常に数秒後にメッセージを取得します。なぜそれが起こったのかを説明する方法がわかりません。これがテスト結果です。時間に注意してください。どちらも同じトピックを消費します。Java の結果:
情報 | jvm 1 | 2018/07/11 17:22:01 | Msg receive:{"did":"XSQ000200000005","msg":{"id":"5560","type":1,"content":"ZBINh6CBsLw7k2xjr1wslSjY+5QavEgYU6AzzLZn0lOgON9ZYHnNP4UJVUGB+/SpsxZQnrWR9PlULzpSP/p9l9t8wiAwj8qhznRaT8jeyx1/EUrDE0oXJB8GxWaLJUICCbC92j4BMA2HU8vgcfDOp9nSy1KFafi9zgFiCf9Igqo="}}
情報 | jvm 1 | 2018/07/11 17:22:11 | Msg receive:{"did":"XSQ000200000005","msg":{"id":"5560","type":1,"content":"ZBINh6CBsLw7k2xjr1wslSjY+5QavEgYU6AzzLZn0lOgON9ZYHnNP4UJVUGB+/SpsxZQnrWR9PlULzpSP/p9l9t8wiAwj8qhznRaT8jeyx1/EUrDE0oXJB8GxWaLJUICCbC92j4BMA2HU8vgcfDOp9nSy1KFafi9zgFiCf9Igqo="}}
情報 | jvm 1 | 2018/07/11 17:23:21 | Msg receive:{"did":"XSQ000200000005","msg":{"id":"5560","type":1,"content":"ZBINh6CBsLw7k2xjr1wslSjY+5QavEgYU6AzzLZn0lOgON9ZYHnNP4UJVUGB+/SpsxZQnrWR9PlULzpSP/p9l9t8wiAwj8qhznRaT8jeyx1/EUrDE0oXJB8GxWaLJUICCbC92j4BMA2HU8vgcfDOp9nSy1KFafi9zgFiCf9Igqo="}}
情報 | jvm 1 | 2018/07/11 17:25:31 | Msg receive:{"did":"XSQ000200000005","msg":{"id":"5560","type":1,"content":"ZBINh6CBsLw7k2xjr1wslSjY+5QavEgYU6AzzLZn0lOgON9ZYHnNP4UJVUGB+/SpsxZQnrWR9PlULzpSP/p9l9t8wiAwj8qhznRaT8jeyx1/EUrDE0oXJB8GxWaLJUICCbC92j4BMA2HU8vgcfDOp9nSy1KFafi9zgFiCf9Igqo="}}
行く結果:
2018-07-11 17:22:03 broker.go DEBUG タイプ 1 の msg 5560 を XSQ000200000005 に送信する準備ができました
2018-07-11 17:22:28 broker.go DEBUG タイプ 1 の msg 5560 を XSQ000200000005 に送信する準備ができました
2018-07-11 17:23:21 broker.go DEBUG タイプ 1 の msg 5560 を XSQ000200000005 に送信する準備ができました
2018-07-11 17:25:38 broker.go DEBUG タイプ 1 のメッセージ 5560 を XSQ000200000005 に送信する準備ができました
ビジネス上の理由だけで、他のエラーは無視してください。
これが私のゴーコンシューマーです:
go - NSQ 再キューイング ハーフ メッセージ
Idsタイプの配列がありint64ます。これは、公開しようとしている Nsq メッセージです。
コンシューマーでは、各 Id を 1 つずつ取得し、データストアから Id に基づいて情報を取得しています。
そのため、フェッチ中に CreateObject メソッドがエラーを返す場合があるため、(エラーが発生している) msg を再キューイングしてそのケースを処理し、再試行できるようにします。
それで、これはこれを行う正しい方法ですか?この場合の欠点はありますか?再発行した方が良いですか?