2010-04-07 3 views
8

현재 메시지 대기열 시스템을 평가 중이며 RabbitMq는 좋은 후보로 보입니다. 그래서 조금 더 자세히 살펴 보겠습니다.RabbitMq가 대기열에 대한 교환기에서 라운드 로빈을 수행합니까?

약간의 컨텍스트를 제공하기 위해 하나의 Exchange로드가 여러 큐에 게시되는 메시지의 균형을 조정하려고합니다. 메시지를 복제하고 싶지 않으므로 팬 아웃 교환은 옵션이 아닙니다.

또한 다중 대기열 대 하나의 대기열과 소비자가 처리하는 하나의 대기열을 생각하는 이유는 단일 실패 지점이 대기열 수준에 있지 않기를 바라는 것입니다.

게시자 측에서 로직을 추가하여 라우팅 키를 편집하고 해당 바인딩을 제자리에 두어 동작을 시뮬레이트하는 것처럼 들릴 수 있습니다. 그러나 이는 각 대기열의 메시지 소비 속도를 고려하지 않는 수동적 접근 방식으로, 해당 대기열의 소비자 응용 프로그램이 죽은 경우 하나의 대기열을 채울 수 있습니다.

저는 Exchange 엔터티 측면에서보다 능동적 인 방법을 찾고 있었는데, 각 큐 크기 나 그 특성에 기반하여 다음 메시지를 보낼 위치를 결정할 것입니다.

나는 Alice와 사용 가능한 RESTful API에 대해 읽었지 만, 빠른 라우팅 결정을 구현하는 데 큰 도움이된다.

누구든지 RabbitMQ를 사용하여 대기열을 교환하는 사이에 라운드 로빈이 가능한지 알고 있습니다. 감사.

+0

생산 과정에서 하나의 대기열을 테스트하자마자 규모 문제가 발생했습니다.단일 큐는 단일 스레드입니다. 우리의 짐을 따라갈 수 없습니다. 우리는 라운드 로빈 배포판에서 작업 할 수있는 모범 사례를 찾고 있습니다. –

답변

4

교환은 AMQP 모델에서는 일반적으로 stateless입니다.하지만 RabbitMQ 플러그인을 관리하고 새로운 실험 교환 유형을 제공하는 시스템이 있으므로 이제는 상태 저장 교환에 대한 최근 실험이있었습니다.

요구 사항을 이해할 수 있는지 완전히 확신 할 수는 없지만 원하는 바가 전혀 없습니다. 생각하지 않습니다. 단일 지점 장애 지점을 제외하고는 직원이 대기열을 읽는 단일 대기열을 사용하면 문제가 해결됩니까? 그렇다면 해당 솔루션을 사용할 수있는 HA 구성에서 RabbitMQ를 구성하면 문제가 줄어 듭니다. 이를 위해 HALinux와 공유 저장소를 사용하여 빠른 장애 조치를 사용하여 액티브/패시브 HA를 얻거나 클라이언트에서 둘 이상의 병렬 브로커와 중복 제거를 설정합니다 (아마도 redis 또는 유사한 방법을 사용하여).

더 많은 사람들이 제안을 제공 할 수있는 rabbitmq-discuss 메일 링리스트에서 질문을 다시 제안하고 후세를 위해 토론을 보관할 수있는 곳을 제안합니다.

+0

도움을 주셔서 감사합니다. 지금은 평가 단계에있는만큼 좋은 작업입니다. – Lancelot

1

Tony와의 합의에 동의합니다. 여기

는 자신의 압연 대신 사용할 수 RabbitMQ, 레디 스의 '매시업'입니다 - 이 방법으로 내장 http://xing.github.com/beetle/

0

하나는 큐에 양식 교환을 공유하는 형태로 할 수 있지만 정확히 라운드 로빈은 일관된 해싱입니다. 설명하는 방법도 https://medium.com/@eranda/rabbitmq-x-consistent-hashing-with-wso2-esb-27479b8d1d21

종이 rabbitmq_consistent_hash_exchange

, 그것은 원에 가중 분포를 대기열을두고 다음 임의의 라우팅 키를 전송하여 가장 가까운 큐에 전송합니다. http://www8.org/w8-papers/2a-webserver/caching/paper2.html