Apa saja opsi antrian pesan yang baik untuk nodejs? [Tutup]


112

Mencari untuk menggunakan antrian pesan di aplikasi web kecil yang saya buat dengan node.js. Saya melihat resque tetapi tidak yakin itu sesuai. Tujuannya adalah untuk mendorong notifikasi ke klien berdasarkan backend dan tindakan klien lainnya dengan socketio. Saya bisa melakukan ini hanya dengan socketio tetapi saya pikir mungkin antrian pesan yang tepat akan membuat ini lebih bersih dan saya tidak perlu menemukan kembali roda.

Apa sajakah pilihan di luar sana?


2
Tidak yakin, tapi ini sepertinya node akan bekerja dengan baik dengan sendirinya!
TK-421

Anda mungkin sudah menyadarinya, tetapi ada satu yang terdaftar di halaman Modul: github.com/ry/node/wiki/modules#message-queue . Saya kira selalu ada biaya waktu pengembangan Anda sendiri yang perlu dipertimbangkan.
TK-421

5
@ TK-421 dan Bjorn Tipling Itu memang sesuatu yang node dapat lakukan sendiri, selama Anda hanya memiliki satu proses node. Solusi eksternal seperti Redis diperlukan jika Anda memiliki proses yang berbeda untuk bagian yang berbeda dari aplikasi Anda (yaitu server web, penyedia auth, pusat pemberitahuan, dll.). Dan tentu saja Anda kemudian dapat terhubung dengan proses non node juga.
Louis Chatriot

1
Contoh menggunakan Node AMQ dan Rabbit MQ (Producer) gist.github.com/DarcInc/9641557 dan (Konsumen) gist.github.com/DarcInc/9641582
ipaul

1
Jika Anda memerlukan antrian dalam memori, Anda dapat mempertimbangkan solusi berbasis rxjs
Marinos An

Jawaban:



12

Anda dapat menggunakan klien STOMP node . Ini akan memungkinkan Anda berintegrasi dengan berbagai antrian pesan termasuk:

  • ActiveMQ
  • RabbitMQ
  • HornetQ

Saya belum pernah menggunakan perpustakaan ini sebelumnya, jadi saya tidak dapat menjamin kualitasnya. Tetapi STOMP adalah protokol yang cukup sederhana jadi saya curiga Anda dapat meretasnya menjadi pengiriman jika perlu.

Pilihan lainnya adalah menggunakan beanstalkd dengan node . beanstalkd adalah "antrian tugas" yang sangat cepat yang ditulis dalam C yang sangat bagus jika Anda tidak memerlukan fleksibilitas fitur dari pialang yang tercantum di atas.


10

Steker tak tahu malu: Saya sedang mengerjakan Bokeh : antrian tugas yang sederhana, dapat diskalakan, dan sangat cepat yang dibangun di atas ZeroMQ. Ini mendukung penyimpanan data pluggable untuk tugas-tugas yang ada, saat ini dalam memori, Redis dan Riak didukung. Saksikan berikut ini.


10

Berikut beberapa rekomendasi yang bisa saya buat:

node-amqp : Klien RabbitMQ yang telah berhasil saya gunakan dalam kombinasi dengan Socket.IO untuk membuat game multipemain waktu nyata dan aplikasi chat, antara lain. Sepertinya cukup bisa diandalkan.

zeromq.node : Jika Anda ingin menelusuri rute non-perantara, ini mungkin menarik untuk dilihat. Lebih banyak pekerjaan untuk mengimplementasikan fungsionalitas tetapi Anda lebih cenderung mendapatkan latensi yang lebih rendah dan throughput yang lebih tinggi.


1
+1 tentang menggunakan ZeroMQ. Setelah banyak riset dan waktu yang dihabiskan untuk mengutak-atik beanstalkd, RabbitMQ, BeeQueue, Bull dan Kue, ZeroMQ akhirnya menjadi pengalaman terbaik bagi saya, terutama untuk proyek ringan yang didukung oleh pekerja. Cepat kilat dan dokumentasinya adalah yang terbaik. Ini juga memiliki manfaat tambahan karena tidak menyumbat server Redis Anda dengan panggilan dalam jumlah besar.
dimiguel

zeromq.nodesekarang dipertahankan di sini: zeromq.js
Marinos An

8

Lihat node-busmq - ini adalah bus pesan dengan tingkat produksi, ketersediaan tinggi, dan skalabel yang didukung oleh redis.

Saya menulis modul ini untuk cloud global kami dan saat ini digunakan di lingkungan produksi kami di beberapa pusat data di seluruh dunia. Ini mendukung antrian bernama, komunikasi peer-to-peer, pengiriman terjamin dan federasi.

Untuk informasi lebih lanjut tentang mengapa kami membuat modul ini, Anda dapat membaca posting blog ini: All Aboard The Message Bus


6

kue adalah satu-satunya antrian pesan yang Anda butuhkan


27
kecuali kue tidak terawat dengan baik, memiliki beberapa masalah dan bukan tes tunggal!
vvo

4
Juga, ini adalah antrian pekerjaan - bukan antrian pesan
HyderA

Ini memiliki beberapa masalah dan tidak cocok untuk produksi
Rahul Kumar

1
Menggunakan bulllebih mudah bagi saya. Dengan kuesaya tersesat dalam dokumentasi.
Marinos An

5

Saya sarankan mencoba Kestrel , cepat dan sederhana seperti Pohon Kacang tetapi mendukung antrian fanout. Berbicara memcache. Itu dibangun menggunakan Scala dan digunakan di Twitter.


7
Perlu dicatat bahwa Kestrel tidak lagi aktif dalam pengembangan.
GordyD

3

Anda mungkin ingin melihatnya

Redis Antrian Pesan Sederhana untuk Node.js

Yang menggunakan Redis dan menawarkan sebagian besar fitur Amazon SQS.


1
Meskipun RSMQ bagus dan telah bekerja untuk saya dalam produksi sekali, ketahuilah bahwa ini menggunakan skrip Lua di Redis dan tidak akan berfungsi dengan cluster Redis / penyiapan sentinel
naugtur

2

Bagaimana dengan Azure ServiceBus? Ini mendukung nodejs.


1

Lihat node-queue-lib . Mungkin cukup bagi Anda. Ini mendukung node.js dan browser. Memiliki dua strategi pengiriman: siaran dan round-robin. Hanya javascript.

Contoh cepat:

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

Saya menggunakan KUE dengan socketIO seperti yang Anda jelaskan. Saya menyimpan socketID dengan pekerjaan dan kemudian dapat mengambilnya kembali di Job Complete .. KUE didasarkan pada redis dan memiliki contoh yang bagus di github

sesuatu seperti ini....

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();
}

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.