nodejs에 대한 좋은 메시지 대기열 옵션은 무엇입니까? [닫은]


112

node.js로 구축중인 작은 웹 앱에서 메시지 큐를 사용하려고합니다. 나는 resque를 보았지만 그것이 적절한 지 확신하지 못했습니다. 목표는 socketio를 사용한 백엔드 및 기타 클라이언트 작업을 기반으로 클라이언트에 알림을 푸시하는 것입니다. 나는 socketio만으로 이것을 할 수 있었지만 적절한 메시지 대기열이 이것을 더 깨끗하게 만들 것이라고 생각했고 바퀴를 재발 명하지 않아도 될 것이라고 생각했습니다.

거기에 어떤 옵션이 있습니까?


2
확실하지는 않지만 이것은 노드가 스스로 잘하는 것처럼 보입니다!
TK-421

이미 알고 계시 겠지만 모듈 페이지에 github.com/ry/node/wiki/modules#message-queue가 나열되어 있습니다 . 항상 고려해야 할 개발 시간의 비용이 있다고 생각합니다.
TK-421

5
@ TK-421과 Bjorn Tipling 그것은 노드 프로세스가 하나만있는 한 노드가 스스로 할 수있는 일입니다. 애플리케이션의 다른 부분 (예 : 웹 서버, 인증 공급자, 알림 센터 등)에 대해 다른 프로세스가있는 경우 Redis와 같은 외부 솔루션이 필요합니다. 물론 그런 다음 비 노드 프로세스와도 연결할 수 있습니다.
루이 Chatriot


1
경우에 당신은 인 - 메모리 당신이 고려할 수있는 큐가 필요 rxjs 기반 솔루션
마리노스

답변:



12

노드 STOMP 클라이언트를 사용할 수 있습니다 . 이를 통해 다음을 포함한 다양한 메시지 대기열과 통합 할 수 있습니다.

  • ActiveMQ
  • RabbitMQ
  • HornetQ

이전에이 라이브러리를 사용한 적이 없어서 품질을 보증 할 수 없습니다. 그러나 STOMP는 매우 간단한 프로토콜이므로 필요한 경우 해킹하여 제출할 수 있습니다.

또 다른 옵션은 beantalkd를 node와 함께 사용하는 것 입니다. beanstalkd는 C로 작성된 매우 빠른 "작업 대기열"이며 위에 나열된 브로커의 기능 유연성이 필요하지 않은 경우 매우 좋습니다.


10

뻔뻔한 플러그 : 저는 Bokeh에서 작업하고 있습니다 : ZeroMQ에 구축 된 간단하고 확장 가능하며 매우 빠른 작업 대기열입니다. 지속적인 작업을위한 플러그 형 데이터 저장소를 지원하며 현재 메모리 내, Redis 및 Riak이 지원됩니다. 확인 해봐.


10

다음은 몇 가지 권장 사항입니다.

node-amqp : 실시간 멀티 플레이어 게임 및 채팅 애플리케이션을 만들기 위해 Socket.IO와 함께 성공적으로 사용한 RabbitMQ 클라이언트. 충분히 신뢰할 수있는 것 같습니다.

zeromq.node : 중개되지 않은 경로로 가고 싶다면 이것은 볼만한 가치가 있습니다. 기능 구현에 더 많은 작업이 필요하지만 지연 시간이 줄어들고 처리량이 늘어날 가능성이 높습니다.


1
ZeroMQ 사용에 +1. beantalkd, RabbitMQ, BeeQueue, Bull 및 Kue를 사용하여 많은 연구와 시간을 투자 한 후 ZeroMQ는 특히 작업자가 지원하는 경량 프로젝트에서 저에게 최고의 경험이되었습니다. 번개처럼 빠르며 문서는 최고 수준입니다. 또한 대량의 호출로 Redis 서버를 막지 않는 추가 이점이 있습니다.
dimiguel

zeromq.node이제 여기에 유지됩니다 : zeromq.js
Marinos An

8

node-busmq를 살펴보세요 . redis가 지원하는 프로덕션 등급의 고 가용성 및 확장 가능한 메시지 버스입니다.

이 모듈은 글로벌 클라우드 용으로 작성되었으며 현재 전 세계 여러 데이터 센터의 프로덕션 환경에 배포되어 있습니다. 명명 된 대기열, 피어 투 피어 통신, 보장 된 전달 및 페더레이션을 지원합니다.

이 모듈을 만든 이유에 대한 자세한 내용은이 블로그 게시물을 참조하십시오. All Aboard The Message Bus


6

kue 는 필요한 유일한 메시지 대기열입니다.


27
kue가 잘 유지되지 않는 것을 제외하고는 여러 가지 문제가 있으며 단일 테스트가 아닙니다!
vvo

4
또한, 작업 큐입니다 -하지 메시지 큐
HyderA

그것은 몇 가지 문제를 가지고 생산에 적합하지 않습니다
라훌 쿠마르에게

1
사용 bull은 나에게 더 간단했습니다. 로 kueI 문서에 분실되었다.
Marinos An

5

Kestrel 을 사용하는 것이 좋습니다 . Beanstalk만큼 빠르고 간단하지만 팬 아웃 대기열을 지원합니다. memcached를 말합니다. Scala를 사용하여 구축되었으며 Twitter에서 사용됩니다.


7
Kestrel이 더 이상 활발하게 개발되고 있지 않다는 점은 주목할 가치가 있습니다.
GordyD

3

당신은보고 싶을 수도 있습니다

Node.js 용 Redis 단순 메시지 큐

Redis를 사용하고 Amazons SQS의 대부분의 기능을 제공합니다.


1
RSMQ는 훌륭하고 한 번 프로덕션에서 저를 위해 일해 왔지만 Redis에서 Lua 스크립트를 사용하고 있으며 Redis 클러스터 / 센티널 설정에서 작동하지 않을
것임을 유의하십시오

2

Azure ServiceBus는 어떻습니까? nodejs를 지원합니다.


1

노드 큐-lib 디렉토리 . 아마도 당신으로 충분할 것입니다. node.js 및 브라우저를 지원합니다. 두 가지 전달 전략 : 브로드 캐스트 및 라운드 로빈. 자바 스크립트 만.

빠른 예 :

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.