2013-03-19 3 views
1

현재 동일한 대기열에 여러 프론트 제작자가있는 추적 시스템에 대해 rabbitMQ를 구현 중입니다.RabbitMQ 대기열 순서 관리

기본적으로 추적 워크 플로에는 노출/클릭 => 리드/판매의 두 단계가 있으므로 대기열에서 보내는 두 가지 유형의 메시지가 있습니다. 매우 간단합니다 : 사용자가 배너를 클릭 한 다음 리디렉션 된 웹 사이트에서 작업을 수행합니다. 이 작업을 수행하려면 몇 초에서 며칠이 걸릴 수 있습니다. 해당 impresison 또는 클릭 후 리드 또는 판매를 소비해야합니다.

문제는 내가 메시지를 연대순으로 소비해야한다는 것입니다. 모든 제작자가 동일한 속도로 큐에 메시지를 보내면 (즉, 메시지가 FIFO 방식으로 올바로 정렬되어야 함) 제작자 중 하나가 (어떤 이유로) 대기열에서 더 느리게 작성할 때 문제가 발생합니다.

예를 들어, 클릭 액션 후 1 초가 지나고 클릭 생산자가 몇 초 동안 멈 추면 클릭하기 전에 리드를 소비하고 추적 시스템이 작동하지 않습니다.

메시지에 첨부 된 헤더에 따라 대기열의 순서를 설정하는 방법을 알고 싶습니다. 내 모든 서버가 동기화되어 있고 해당 시계의 시간은 < 1ns이므로이 정보에 따라 대기열을 주문하고 싶습니다.하지만 문서의 어느 곳에서도 대기열 순서 또는 사용 순서를 설정할 수는 없습니다.

도움 주셔서 감사합니다.

답변

3

AMQP 대기열은 FIFO 대기열입니다. 많은 수의 동시 메시지가 게시되면 메시지가 먼저 오는 모호성이있을 수 있으므로 메시지 one과 메시지 two은 실제 순서대로 대기열에 나열되지 않을 수도 있습니다. 그것은 당신이 HA와 속도에 대해 지불 한 가격입니다. 그것에 대해 더 알고 싶다면 IRC rabbitmq 채널에 질문 할 수 있습니다.

+2

실제로 문제는 rabbitmq와 "standard fifo"에 있지 않습니다. 소프트웨어를 통해 잠재적 인 하드웨어 오작동을 보완하려고합니다. (예 : rabbitmq에게 FIFO 방식이 아닌 메시지를 재정렬하도록 요청합니다. 알 수없는 이유로 게시). 근본적으로 나는 끔찍한 디자인 습관을 없애야한다. :) – user1159791

0

나는 큐가 큐를 의미한다고 생각한다. 너는 소비 중에 그들을 분류 할 수 있니? 예를 들어 대기열에서 10 개의 메시지를 가져 와서 구문 분석 한 다음 적절한 순서대로 자신의 대기열 또는 목록에 넣으면됩니다.

+0

실제로 큐에 한 번에 수백만 개의 메시지가있을 수 있습니다. 각 소비자가 모든 메시지를 검색하여 최신 메시지를 찾을 수는 없습니다. 다른 한편으로는로드 밸런서를 구매/설치/구성하여 "세션"내의 연속적인 작업이 동일한 제작 서버에서 처리되도록 할 수 있습니다. 바로 지금 나는 프론트 서브 서버에 DNS 라운드 로빈을 사용하고 있습니다. – user1159791