TL 말할 수 있습니다, DR 여러 = 사실은 빠른 경우에 있지만 요구 사항과 같은 더 많은주의 회계 및 배치를 요구한다
소비자는 해당 소비자에 따라 단조로운 성장 ID를 가진 메시지를받습니다. ID는 배달 태그라는 64 비트 숫자입니다 (실제로는 부호없는 32 비트가 될 수 있지만 Java에는 길이가 없습니다). 프리 페치는 소비자가받지 못한 가장 많은 메시지입니다.
true
이 여러 개인 최고 배달 태그를 확인하면 소비자가 처리하지 못한 모든 배달되지 않은 메시지 (작은 숫자)로 확인됩니다. 분명히 높은 프리 페치가 있으면 각 메시지를 확인하는 것보다 빠릅니다.
이제 RabbitMQ는 소비자가 메시지 (받지 못한 메시지)를 수신했음을 알고 있지만 모든 메시지가 올바르게 소비되었는지는 알 수 없습니다. 따라서 모든 이전 메시지가 사용되었는지 개발자에게 알려줘야합니다. 소비자는 순서대로 메시지를 전달할 것이다 (클라이언트가 내부적으로 BlockingQueue를 사용한다고 믿는다.)하지만 메시지가 아닐 수도있는 다운 스트림에 사용되는 라이브러리/클라이언트에 따라 다르다.
이렇게하면 메시지를 일괄 처리 (예 : 거래 또는 다른 시스템으로 보내는 메시지 그룹 전송)하거나 안정적으로 버퍼링 할 때만 효과적입니다. 대개 블로킹 큐를 사용하고 큐를 주기적으로 배수시켜 일련의 메시지를 다운 스트림 시스템에 전송합니다.
반면에 실시간으로 각 메시지를 스트리밍하는 경우 실제로는이 작업을 수행 할 수 없습니다 (예 : multiple = false).
그룹에 메시지가 잘못되었습니다 (예 : 내부 대기열에서 빠져 나왔습니다 ... 토끼 대기열이 아님). 그 나쁜 것을 잠그지 않을 것입니다. 이 경우 복수 = true
중 하나를 사용할 수 없습니다.
마지막으로 미리 계산 한 것보다 일정량의 메시지 (시간이 아니라)를 기다리는 경우 무기한 기다릴 것입니다. 좋은 아이디어는 아닙니다. 대기 시간이 필요하며 메시지 수는 <=
이어야합니다.
정확히 알다시피 다중을 정확히 사용하려면 = true
을 사용하십시오.
여러 항목을 true로 설정하면 한 번에 수령 할 시점이나 수를 어떻게 알 수 있습니까? 그게 바로 API가 관리하는 것입니까? 아니면 그 시점에서 준비가되어있는 모든 것을 막을 수 있습니까? 만약 그렇다면 우리가 실제로 어떤 멍청이를 기다리게하고 싶다면 두 번째 경우는 적절하지 않을까요? – JeremyK
기본 질문에 사과드립니다. AMQP에 대한 경험이 없으며 갑자기 성능을 향상시켜야합니다. – JeremyK
@JeremyK 여러 항목에 대해 잘 모르겠습니다. 적절한 경우가 전혀없는 사용 사례가 없었습니다. 이것이 당신이 정말로 필요로하는 것이 확실합니까? 자동 응답으로 처리 할 수 없습니까? 아니면 처리를 완료하면 즉시 하나씩 처리 할 수 있습니까? – cantSleepNow