Node.jsで構築している小さなWebアプリでメッセージキューを使用することを検討しています。私はresqueを見ましたが、それが適切かどうかはわかりません。目標は、socketioを使用したバックエンドおよびその他のクライアントアクションに基づいてクライアントに通知をプッシュすることです。私はちょうどsocketioでこれを行うことができましたが、適切なメッセージキューがこのクリーナーを作成する可能性があり、車輪を再発明する必要はないと思いました。
そこにあるオプションは何ですか?
redis を超高速 node_redis クライアントで使用できます。組み込みの pubsub セマンティクスもあります。
ノード STOMPクライアント を使用できます。これにより、次のようなさまざまなメッセージキューと統合できます。
私は以前にこのライブラリを使用したことがないので、その品質を保証することはできません。ただし、STOMPは非常に単純なプロトコルなので、必要に応じてハッキングして送信することができます。
もう1つのオプションは、 beanstalkd with node を使用することです。 beanstalkdはCで記述された非常に高速な「タスクキュー」で、上記のブローカーの機能の柔軟性が必要ない場合に非常に優れています。
恥知らずなプラグイン:私は Bokeh に取り組んでいます:ZeroMQ上に構築された、シンプルでスケーラブルで非常に高速なタスクキュー。タスクを永続化するためのプラガブルなデータストアをサポートし、現在メモリ内にあり、RedisとRiakがサポートされています。見てみな。
ここにいくつかの推奨事項を示します。
node-amqp :リアルタイムマルチプレイヤーゲームやチャットアプリケーションを作成するためにSocket.IOと組み合わせて使用したRabbitMQクライアント。十分に信頼できるようです。
zeromq.node :仲介されていないルートを下る場合は、一見の価値があります。機能を実装するための作業は増えますが、待ち時間が短くなり、スループットが高くなる可能性が高くなります。
node-busmq をご覧ください-redisを使用した、プロダクショングレードで可用性の高いスケーラブルなメッセージバスです。
グローバルクラウド用にこのモジュールを作成し、現在、世界中の複数のデータセンターの運用環境に展開しています。名前付きキュー、ピアツーピア通信、保証付き配信およびフェデレーションをサポートしています。
このモジュールを作成した理由の詳細については、このブログ投稿をご覧ください: All Aboard The Message Bus
kue が必要な唯一のメッセージキューです
Kestrel をお勧めします。Beanstalkのように高速でシンプルですが、ファンアウトキューをサポートしています。 memcachedを話します。 Scalaを使用して構築され、Twitterで使用されています。
node-queue-lib を見てください。おそらくそれで十分です。 node.jsとブラウザーをサポートします。ブロードキャストとラウンドロビンの2つの配信戦略があります。 JavaScriptのみ。
簡単な例:
var Queue = require('node-queue-lib/queue.core');
var queue = new Queue('Queue name', 'broadcast');
// subscribe on 'Queue name' messages
queue.subscribe(function (err, subscriber) {
subscriber.on('error', function(err){
//
});
subscriber.on('data', function (data, accept) {
console.log(data);
accept(); // accept process message
});
});
// publish message
queue.publish('test');
Azure ServiceBusはどうですか? nodejsをサポートします。
説明したように、socketIOでKUEを使用しました。 socketIDをジョブと共に保存し、ジョブ完了で取得できました。KUEはredisに基づいており、 githubの良い例
このようなもの....
jobs.process('YourQueuedJob',10, function(job, done){ doTheJob(job, done); }); function doTheJob(job, done){ var socket = io.sockets.sockets[job.data.socketId]; try { socket.emit('news', { status : 'completed' , task : job.data.task }); } catch(err){ io.sockets.emit('news', { status : 'fail' , task : job.data.task , socketId: job.data.socketId}); } job.complete(); }
Ewd-qoper8をチェックアウトすることもできます。 https://github.com/robtweed/ewd-qoper8