2009-07-16 2 views
8

우선 순위 메시지 (예 : AMQP)를 일관되게 지원하지 않는 메시지 지향형 미들웨어의 경우 대기열에 FIFO 의미론 만있을 때 우선 순위 소비를 구현하는 가장 좋은 방법은 무엇입니까? ? 일반적인 사용 사례는 메시지의 큰 백 로그가 대기열에있을 때 우선 순위가 낮은 메시지보다 먼저 우선 순위가 높은 메시지를받는 시스템입니다.FIFO Qeueing 시스템에서 우선 순위 메시징을 구현하는 가장 좋은 방법은 무엇입니까

+2

대기열이 여러 개있을 수 있습니까? 그렇다면 우선 순위 대기열이 비어있는 경우에만 사용되는 표준 대기열보다 먼저 우선 순위가 높은 메시지에 대한 별도의 대기열을 제안하는 것이 좋습니다. 그게 당신의 시나리오에 맞는지는 모르겠지만 그것이 제 첫번째 생각이었습니다. – CodeFusionMobile

+0

CSharpWithJava에 동의합니다. 나는 지금 큰 메시지 응용 프로그램을하고 있습니다. 당신의 질문에 여러 대기열이 필요하다고 생각합니다. 그래서 낮은 pri 메시지를 낮은 pri 대기열로 내리고, 즉시 높은 우선 순위를 읽을 수 있습니다. –

답변

10

주어진 단일 대기열에 대해서만 FIFO를 지원한다고 가정하면 물론 여러 대기열이나 중개자를 소개하거나 더 복잡한 소비자를 가져야합니다.

여러 큐를 처리하는 데는 두 가지 방법이 있습니다. 생산자와 소비자는 우선 순위가 높은 대기열과 백그라운드 작업을위한 대기열이라는 두 개의 대기열에 동의 할 수 있습니다.

생산자가 단일 대기열로 제한되었지만 소비자를 제어 할 수있는 경우 경로에 팬 아웃 라우터를 도입하는 것이 좋습니다. 따라서 producer-> Router는 하나의 큐이므로 라우터는 소비자에게 두 개의 큐를 가지고 있습니다.

문제를 해결할 수있는 또 다른 방법은 고객이 대기열 앞에있는 쓰레드를 회전시킨 다음 내부적으로 작업을 보내도록하는 것입니다. 위의 라우터 버전과 비슷하지만 하나의 앱 안에 있습니다. 이는 앱 내부에서 여러 메시지를 전달할 수있는 단점을 가지고 있으며, 이는 실패한 경우 복구를 복잡하게 만듭니다.

우선 순위가 높은 이벤트가 여전히 지연 되어도 일부 이벤트를 처리해야하는 경우, 우선 순위가 낮은 이벤트의 우선 순위를 고려해야합니다.

+1

이것은 직장에서 프로젝트를 위해이 전략을 구현 한 사람과 어느 정도 일치합니다. 등급이 매겨진 우선 순위 시스템을위한 여러 대기열. 우리는 기아에 대해별로 걱정하지 않습니다. 왜냐하면 우선 순위가 낮은 중요 우선 순위가 낮은 중요한 메일을 다시 게시 할 수 있기 때문입니다. 과잉 작업은 대다수의 이유로 맹목적으로 처리됩니다. – quaternion

관련 문제