2011-09-15 2 views
1

납품 주문이 가장 중요한 곳에서 AMQP를 사용하는 것이 좋습니다.인도 기간 유지

그래서 배달되지 않은 메시지는 순서가 맞지 않게 다시 대기하므로 정상적인 재 배달 기능을 사용할 수 없습니다.

마치 내가 처리해야 할 메시지가 처리 될 때까지 대기열에 남겨두고 메시지를 삭제해야합니다. 그런 다음 동일한 메시지가 순서대로 두 번 처리 될 수는 있지만 쉽게 트래핑하고 처리 할 수 ​​있습니다.

그러나 나는 이것을하는 법을 모르겠습니다. 내가 찾고있는 것은 일종의 엿보기이며 메시지 메서드를 삭제하여 직접 제어 할 수 있지만 존재하지 않는 것 같습니다.

내가 누락되었거나 잘못된 방식으로 문제를 해결하려고합니까?

답변

0

AMQP에서 엿보기 및 삭제를 할 수 없습니다. 사실 큐를 사용하지 않고 대기열의 메시지를 탐색 할 수 없으며 Rabbit은 이것을 가능하게하는 확장을 제공하지 않습니다.

문제에 대한 일반적인 대응책은 "해당 순서 제약 조건이 실제로 필요하면 매우 신중하게 생각하십시오."입니다. 예를 들어, 해당 제약 조건을 사용하면 대기열에 여러 소비자를 배치 할 수 없기 때문입니다.

+0

불행히도 주문 보존이 정말로 필요합니다. 저는 파라마운트라고 말했습니다. 워드 프로세서를 살펴보면 시작 시간에 소비자가 확인하는 별도의 복구 대기열에 비 ack'd 메시지를 넣는 것이 가능할 수있는 것처럼 보입니다. 아직 이해할 수 있는지 확실하지 않습니다 ... – Roger

+0

그런 식으로 할 수 있습니다. 그러나 소비자가 데드 레터 대기열에서 소비 할 때 죽으면 어떻게합니까? 다른 * 대기열을 추가하면 원래 문제가 다른 곳으로 옮겨집니다. – scvalex

0

나는 동일한 문제를 해결해 왔습니다. 제 용액에서 I는 외측 메시지을왔다 하나 단일 메시지메시지를 배치 되어 먼저 처리 한하고 를 I은 처리을 감싸 위해 내부 메시지 남아있을 . 여기에는 몇 가지 단점이 있습니다. 예를 들어 큰 메시지 (래핑 계층에 많은 메시지가 포함 된 경우), 직렬화가 더 어려워진 경우 등등.