nodejsに適したメッセージキューオプションは何ですか?[閉まっている]


112

node.jsを使用して構築している小さなWebアプリでメッセージキューを使用することを検討しています。私はresqueを見ましたが、それが適切かどうかはわかりません。目標は、socketioを使用したバックエンドおよびその他のクライアントアクションに基づいてクライアントに通知をプッシュすることです。私はsocketioだけでこれを行うことができましたが、適切なメッセージキューでこれをよりクリーンにでき、ホイールを再発明する必要がないと思いました。

そこのオプションは何ですか?


2
確かではありませんが、これはノード自体がうまくいくようです!
TK-421

おそらくすでにご存じでしょうが、「モジュール」ページにはgithub.com/ry/node/wiki/modules#message-queueがリストされています。あなた自身の開発時間を考慮すると常にコストがかかると思います。
TK-421

5
@ TK-421とBjorn Tiplingこれは、ノードプロセスが1つしかない限り、実際にノードが実行できることです。アプリケーションの異なる部分(Webサーバー、認証プロバイダー、通知センターなど)に異なるプロセスがある場合は、Redisなどの外部ソリューションが必要です。そしてもちろん、ノード以外のプロセスにも接続できます。
Louis Chatriot

1
Node AMQとRabbit MQを使用した例(プロデューサー)gist.github.com/DarcInc/9641557および(コンシューマー)gist.github.com/DarcInc/9641582
ipaul

1
場合は、あなたは、この検討することができ、メモリ内のキューを必要とするrxjsベースのソリューション
マリノスアン

回答:


51

非常に高速なnode_redisクライアントでredisを使用できます。組み込みのpubsubセマンティクスも含まれます。


7
RSMQと同じように、redisの上に適切なキューイングモジュールを使用することをお勧めします。これは、かなり単純なようです。npmjs.com/package/rsmq
Exinferis

技術的な心配をせずにメッセージングの力だけが必要な場合は、node-ts.github.io / bus
Andrew dh

12

ノードSTOMPクライアントを使用できます。これにより、次のようなさまざまなメッセージキューと統合できます。

  • ActiveMQ
  • RabbitMQ
  • HornetQ

このライブラリは以前に使用したことがないため、その品質を保証することはできません。しかし、STOMPはかなり単純なプロトコルなので、必要に応じて送信にハッキングできると思います。

別のオプションは、nodeでbeanstalkdを使用することです。beanstalkdはCで記述された非常に高速な「タスクキュー」であり、上記のブローカーの機能の柔軟性が必要ない場合に非常に適しています。


10

恥知らずなプラグイン:私はBokehに取り組んでいます。ZeroMQに基づいて構築された、シンプルでスケーラブルで非常に高速なタスクキューです。永続的なタスクのプラグ可能なデータストアをサポートします。現在はメモリ内にあり、RedisとRiakがサポートされています。見てみな。


10

ここに私ができるいくつかの推奨事項があります:

node-amqp:Socket.IOと組み合わせて使用​​して、とりわけリアルタイムマルチプレイヤーゲームやチャットアプリケーションを作成するのに成功したRabbitMQクライアント。十分に信頼できるようです。

zeromq.nodeブローカーでないルートを下りたい場合、これは一見の価値があるかもしれません。機能を実装するための作業は増えますが、待ち時間が短縮され、スループットが向上する可能性が高くなります。


1
ZeroMQの使用に関する+1。Beanstalkd、RabbitMQ、BeeQueue、Bull、Kueをいじくり回して多くの調査と時間を費やした後、ZeroMQは、特にワーカーを使用した軽量プロジェクトにとって、最高の体験となりました。非常に高速で、ドキュメントは一流です。また、大量の呼び出しでRedisサーバーが詰まらないという利点もあります。
dimiguel

zeromq.node現在ここで維持されています:zeromq.js
Marinos

8

node-busmqを見てくださいてください。これは、redisに支えられたプロダクショングレードの高可用性でスケーラブルなメッセージバスです。

私はこのモジュールをグローバルクラウド用に作成し、現在、世界中のいくつかのデータセンターの実稼働環境にデプロイされています。名前付きキュー、ピアツーピア通信、保証された配信とフェデレーションをサポートしています。

このモジュールを作成した理由の詳細については、次のブログ投稿をご覧ください。メッセージバス上のすべて


6

kueは、必要になる唯一のメッセージキューです。


27
kueが十分に維持されていないことを除いて、いくつかの問題があり、単一のテストではありません!
vvo 2013年

4
また、メッセージキューではなく、ジョブキューです
HyderA

これにはいくつかの問題があり、本番環境には適していません
Rahul Kumar

1
使用するbull方が簡単でした。とkue私はドキュメントで失われました。
マリノス

5

私はKestrelを試すことをお勧めします。これはBeanstalkのように高速でシンプルですが、ファンアウトキューをサポートしています。memcachedを話します。Scalaを使用して構築され、Twitterで使用されています。


7
ケストレルが現在活発に開発されていないことは注目に値します。
GordyD 2014年

3

あなたは見てみたいかもしれません

Node.js用のRedisシンプルメッセージキュー

Redisを使用し、Amazons SQSのほとんどの機能を提供します。


1
RSMQは素晴らしく、私にとっては本番環境で1度は動作していますが、RedisでLuaスクリプトを使用しており、Redisクラスター/センチネルセットアップでは動作しないことに注意してください
naugtur

2

Azure ServiceBusはどうですか?nodejsをサポートしています。


1

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');

1

あなたが説明したように、socketIOでKUEを使用しました。私はジョブにsocketIDを保存し、それをJob Completeで取得できました。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();
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.