2010-04-07 9 views
0

프로세스 A는 객체 a1, a2, a3 등의 값을 계산하고 결과를 미들웨어 대기열 (RabbitMQ)로 보냅니다. 소비자는 대기열을 읽고 이러한 결과를 더 처리합니다. 주기적으로 프로세스 A는 이러한 값의 스냅 샷을 보내야하므로 소비자는 다른 계산을 수행 할 수 있습니다. 이러한 객체의 값은 독립적으로 변경 될 수 있습니다. 대기열은 다음과 같이 보일 수 있습니다. a1, a1, a2, a1, a2, a2, a3 ... 소비자는 대기열의 각 항목을 처리합니다. 스냅 샷에는 모든 개체가 포함되어야하며 소비자는 한 번에 모든 개체에 대해이 메시지를 처리합니다.메시징 패턴 질문

따라서 다음과 같은 대기열이 필요합니다. a1, a1, a3, a2, a2, [스냅 샷, a1, a2, a3], a3, a1 ... 문제는 이들 항목이 다르다는 것입니다 유형 : a1, a2와 같은 객체 유형 및 스냅 샷에 대한 유형. 이는 다른 대기열에서 처리해야한다는 것을 의미하지만이 경우 경쟁 조건이 있습니다. 즉, 소비자가 스냅 샷을 처리하기 전에 개체를 처리 할 수 ​​있습니다.

이 문제를 해결할 수있는 패턴이 있습니까? 우리는 메시지 대기열에 RabbitMQ를 사용하고 있습니다.

+1

아마도 "QueuesItem"과 같은 일반적인 클래스의 객체로 래핑하여 "다른 유형"문제를 해결할 수 있습니다. 소비자는 QueueItem에 포함 된 객체의 종류를 대기열에서 제거한 후 간단히 확인할 수 있습니다. 그러나 이것은 일반적인 해결책이며 RabbitMQ에 대해 아무 것도 모르기 때문에 이것을 주석으로 남겨 둘 것입니다. –

답변

0

소비자 당 하나의 큐를 사용하고 컨텐트 유형 접두사를 사용하여 전달되는 메시지 유형을 나타냅니다. AMQP 메시지에 'type'속성이있을 수 있다고 생각합니다. 그러나이 메시지를 사용하지는 않았으므로이 문제에 적용 가능한지 여부는 알 수 없습니다.