다음을 통해 공유


Azure Service Bus 메시지 프리페치

프리페치 기능은 백그라운드의 메시지를 프리페치 횟수까지 로컬 프리페치 버퍼로 가져옵니다. 메시지는 버퍼에서 제공됩니다. 이 경우 버퍼에서 공간이 확보되고 수신기는 백그라운드에서 더 많은 프리페치를 수행합니다.

프리페치 기능을 사용하도록 설정하려면 큐 또는 구독 클라이언트의 프리페치 수를 0보다 큰 숫자로 설정합니다. 이 값을 0으로 설정하면 프리페치가 해제됩니다. 기능이 꺼진 후 프리페치 버퍼에 메시지가 있는 경우 애플리케이션은 먼저 버퍼에서 해당 메시지를 수신한 다음 서비스로 이동합니다.

ServiceBusReceiverOptionsServiceBusProcessorOptions 개체에 있는 프리페치 수 속성을 설정합니다.

참고 항목

Java Script SDK는 프리페치 기능을 지원하지 않습니다.

프리페치 버퍼에서 메시지를 사용할 수 있지만 이후의 수신 호출은 버퍼로부터 즉시 수행됩니다. 공간을 사용할 수 있으면 버퍼가 백그라운드에서 보충됩니다. 배달할 수 있는 메시지가 없으면 수신 작업은 버퍼를 비우고 예상대로 대기하거나 차단됩니다.

프리페치가 기본 옵션이 아닌 이유는 무엇인가요?

프리페치는 애플리케이션이 메시지를 요청하기도 전에 로컬 검색에 사용할 수 있도록 메시지를 준비하여 메시지 흐름을 빠르게 합니다. 이러한 처리량 혜택은 애플리케이션 작성자가 명시적으로 수행해야 하는 절충의 결과입니다.

수신 및 삭제 모드를 사용하는 경우 프리페치 버퍼로 제공되는 모든 메시지를 더 이상 큐에서 사용할 수 없습니다. 메시지는 애플리케이션에 수신될 때까지만 메모리 내 프리페치 버퍼에 유지됩니다. 메시지가 애플리케이션에 수신되기 전에 애플리케이션이 종료되면 해당 메시지를 복구할 수 없습니다(메시지가 손실됨).

보기 및 잠금 수신 모드를 사용하는 경우 프리페치 버퍼에 페치된 메시지가 버퍼에 잠금 상태로 제공됩니다. 잠금 타이머는 메시지가 버퍼에 프리페치되는 순간부터 시작됩니다. 프리페치 버퍼가 크고 처리하는 데 너무 오래 걸려서 메시지가 프리페치 버퍼에 머무르는 동안 또는 심지어 애플리케이션이 메시지를 처리하는 동안에도 메시지 잠금이 만료되는 경우 애플리케이션이 처리할 이벤트에 혼동이 발생할 수 있습니다. 애플리케이션은 만료되었거나 만료가 임박한 잠금이 적용된 메시지를 획득할 수 있습니다. 이 경우 애플리케이션이 메시지를 처리할 수 있지만 잠금 만료로 인해 메시지를 완료할 수 없음을 발견할 수 있습니다. 애플리케이션은 LockedUntilUtc 속성을 확인할 수 있지만 브로커와 로컬 컴퓨터 시계 사이에는 클록 오차가 있음을 명심하세요.

잠금이 프리페치 버퍼에서 자동으로 만료되면 메시지는 중단된 것으로 처리되며 큐에서 다시 검색할 수 있습니다. 그런 다음 메시지가 프리페치 버퍼로 다시 가져오고 끝에 배치됩니다. 일반적으로 메시지 만료 동안 프리페치 버퍼를 사용할 수 없는 경우 메시지가 반복적으로 프리페치되지만 유용한(유효하게 잠금 처리) 상태로 전달되지 못하며 결과적으로 최대 배달 횟수가 초과되면 배달 못한 메시지 큐로 이동됩니다.

애플리케이션이 메시지를 명시적으로 중단하면 큐에서 검색할 수 있는 메시지가 다시 제공될 수 있습니다. 프리페치를 사용하도록 설정하면 메시지가 프리페치 버퍼로 다시 페치되어 끝에 배치됩니다. 프리페치 버퍼의 메시지가 FIFO(선입선출) 순서로 드레이닝되면 애플리케이션이 메시지를 순서대로 수신할 수 있습니다. 예를 들어 애플리케이션은 ID가 2인 메시지를 받은 다음, 버퍼에서 ID가 1(이전에 중단됨)인 메시지를 받을 수 있습니다.

메시지 처리에 대해 높은 수준의 안정성이 필요하며 처리에 많은 작업과 시간이 소요될 경우 프리페치 기능을 신중하게 사용하거나 아예 사용하지 않는 것이 좋습니다. 높은 처리량이 필요하고 메시지 처리 비용이 일반적으로 저렴한 경우 프리페치 기능을 사용하면 처리량이 크게 개선됩니다.

큐 또는 구독에 구성된 최대 프리페치 수와 잠금 기간을 적절히 조정하여, 적어도 잠금 시간 제한이 프리페치 버퍼의 최대 크기+1개 메시지에 대해 예상되는 누적 메시지 처리 시간을 초과하도록 해야 합니다. 동시에, 잠금 기간은 메시지가 잠겨 있는 동안 최대 수명을 초과할 수 있을 정도로 너무 길어서는 안 됩니다. 이는 프리페치했을 때 완료할 수 없는 경우 메시지가 제거된다는 의미이기 때문입니다.

2026년 9월 30일에 Azure SDK 지침을 따르지 않는 Azure Service Bus SDK 라이브러리 WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus 및 com.microsoft.azure.servicebus를 사용 중지합니다. 또한 SBMP 프로토콜에 대한 지원이 종료되므로 2026년 9월 30일 이후에는 더 이상 이 프로토콜을 사용할 수 없습니다. 해당 날짜 마이그레이션에 중요한 보안 업데이트와 개선된 기능을 제공하는 최신 Azure SDK 라이브러리로 마이그레이션합니다.

이전 라이브러리는 2026년 9월 30일 이후에도 계속 사용할 수 있지만 더 이상 Microsoft로부터 공식 지원 및 업데이트를 받을 수 없습니다. 자세한 내용은 사용 중지 공지 지원을 참조하세요.