2017-11-02 8 views
1

우리는 현재 RabbitMQ (RabbitMQ 3.6.12, Erlang 19.2)의 초당 60-150 개의 메시지를 소비해야하는 마이크로 서비스 (노드 v8.3.0)를 프로토 타이핑하고 있습니다. .1). 때로는 매력처럼 작동하고 대기열에 남아있는 메시지가 없습니다. 그러나 메시지가 갇히지 않는 대부분의 경우 초당 5-20 개의 메시지 만 처리되어 대기열에 최대 3M 개의 메시지가 누적됩니다.처리 방법 AMQP/노드를 사용하여 초당 100 개의 메시지

이제 우리는 단일 소비자로 모든 메시지를 처리하는 방법에 대해 정말로 궁금합니다. 지연없이 모든 메시지를 처리하는 Java 소비자가 이미 있기 때문입니다. amqplib을 기준으로 this node library을 사용합니다. 또한 처리기는 수신 메시지를 즉시 확인합니다. 비즈니스 로직은 절대적으로 비동기입니다. 따라서 비즈니스 논리가 없어도 고착됩니다. 거래 유형이 topic이고 durable이 아니며 대기열에 auto-deleting 기능이 사용 설정되어 있습니다. 비활성화 된 프리 페치, 프리 페치 = 1100을 아무런 성공없이 시도했습니다.

그래서 ..

1)는 노드에 대한 어떤 AMQP/RabbitMQ 라이브러리를 사용합니까?
2) 초당 처리 할 메시지 수는 몇 개입니까?
3) 추가 개선 사항/제안 사항?

감사합니다.

+1

통합 코드가 없으면 대답하기가 정말 어렵습니다. RabbitMQ와 같은 AMQP 서버는 일반적으로 초당 수백 개 이상의 처리가 가능하지만 더 많은 채널 및/또는 연결이 필요합니다. – tadman

+0

https://github.com/lanetix/node-lanetix-amqp-easy#usage - 언급 된 효과는 표시된 예에서도 발생합니다 (connect + consume + console.log). 1 개의 연결, 1 개의 채널, 1 개의 대기열. – fheck

+0

다른 AMQP 라이브러리를 사용해보고 한 번에 둘 이상의 작업자를 실행 해보십시오. – tadman

답변

1

RabbitMQ 팀은 this mailing list을 모니터하고 때로는 stackoverflow에 대한 질문에 답합니다.

올바르게 작동하는 Java 소비자를 보유하고 있다는 사실은 amqplib-easy, amqplib 또는 귀하의 코드를 범인으로 가리 킵니다. 또한 RabbitMQ에서 하나의 큐를 사용하는 것은 안티 패턴입니다. 이는 큐가 브로커의 동시성의 단위이기 때문입니다.

나는 함께 RabbitMQ 따라서 perftest 응용 프로그램 (자바)와 노드 소비자를 실행에 README을 포함하는 test project을 뒀다. PerfTest는 환경의 성능 성능을 평가하는 많은 기능을 제공하므로 익숙해 져야합니다.

제 테스트 환경에서는 게시 속도를 4096 msg/sec 쉽게 유지할 수 있습니다. 그 숫자를 8192으로 늘리면 노드 앱이 충분히 빨리 소비하지 못하기 때문에 메시지가 다시 표시됩니다. "plain"amqplib을 사용하여 비교하는 것도 흥미로울 것입니다.

+0

답장을 보내 주셔서 감사합니다. "평범한"amqplib과 비즈니스 논리로 테스트 해 보겠습니다! 결과를 즉시 게시 할 것입니다. – fheck

+0

은 'rabbot'과 함께 테스트 설정을 시도했습니다 - 최신 macbook air에서 초당 14k 메시지를 처리합니다. 그래서'amqplib-easy'는 가능한 한 빠르지 않습니다 ... 다음 단계 : 병목 현상을 찾아냅니다. – fheck

+1

발견 한 내용을 보내 주셔서 감사합니다. [메일 링리스트] (https://groups.google.com/forum/#!forum/rabbitmq-users)는 추가 질문이 있으면 유용한 자료입니다. –