Azure Service Bus - 메시지 만료(Time to Live)

메시지의 페이로드 또는 메시지가 수신기에 전달하는 명령이나 조회는 거의 항상 특정 형식의 애플리케이션 수준 만료 기한을 따릅니다. 이러한 기간 후에는 콘텐츠가 더 이상 배달되지 않거나 요청된 작업이 더 이상 실행되지 않습니다.

큐 및 토픽이 주로 애플리케이션 또는 애플리케이션 부분의 부분 실행 컨텍스트에서 사용되는 개발 및 테스트 환경에서는 다음 테스트 실행이 새로 시작될 수 있게 표준 테스트 메시지를 자동으로 가비지 수집되도록 할 수 있습니다.

참고 항목

아직 Service Bus 개념에 익숙하지 않은 경우 Service Bus 개념Service Bus 큐, 주제 및 구독을 참조하세요.

모든 개별 메시지에 대한 만료는 상대적 기간을 지정하는 time-to-live 시스템 속성을 설정하여 제어할 수 있습니다. 만료는 메시지가 엔터티 큐에 추가될 때 절대 인스턴스가 됩니다. 이때 expires-at-utc 속성은 enqueued-time-utc + time-to-live 값을 취합니다. broker 저장 메시지의 TTL(Time to Live) 설정은 현재 수신 중인 클라이언트가 없는 경우 강제 적용되지 않습니다.

expires-at-utc 인스턴트 후에 메시지는 검색할 수 없게 됩니다. 전달이 잠겨 있는 메시지는 만료의 영향을 받지 않습니다. 이러한 메시지는 여전히 정상적으로 처리됩니다. 잠금이 만료되거나 메시지가 중단되면 만료가 즉시 적용됩니다. 메시지가 잠금 상태인 경우 애플리케이션이 만료된 메시지를 소유하고 있을 수 있습니다. 애플리케이션이 메시지를 계속 처리하려고 할지 또는 메시지를 중단하도록 선택할지는 구현자가 결정합니다.

밀리초 또는 초 순서가 매우 낮은 TTL은 수신자 애플리케이션이 메시지를 받기 전에 만료될 수 있습니다. 애플리케이션에서 작동하는 가장 높은 TTL을 고려합니다.

참고 항목

예약된 메시지의 경우 검색을 위해 큐에서 메시지를 구체화할 큐에 넣기 시간을 지정합니다. 메시지가 Service Bus로 전송되는 시간은 메시지가 큐에 추가된 시간과 다릅니다. 메시지 만료 시간은 메시지가 Service Bus로 전송되는 시간이 아니라 큐에 추가된 시간에 따라 달라집니다. 따라서 expires-at-utc는 여전히 큐에 추가된 시간 + TTL(Time-to-Live)입니다.

예를 들어 ScheduledEnqueueTimeUtcUtcNow에서 5분으로 설정하고 TimeToLive를 10분으로 설정하면 메시지가 지금부터 5 + 10 = 15분 후에 만료됩니다. 메시지는 5분 후에 큐에서 구체화되고 10분 카운터는 그 때부터 시작됩니다.

엔터티 수준 만료

큐 또는 토픽으로 전송되는 모든 메시지는 엔터티 수준에서 설정된 기본 만료 대상입니다. 만드는 동안 포털에서 설정하고 나중에 조정할 수 있습니다. time-to-live가 명시적으로 설정되지 않은 엔터티로 보낸 모든 메시지에는 기본 만료가 사용됩니다. 기본 만료는 time-to-live 값의 최대값으로도 사용됩니다. time-to-live 만료가 기본값보다 더 긴 메시지는 큐에 추가되기 전에 자동으로 메시지 time-to-live 기본값으로 조정됩니다.

참고 항목

  • 조정된 메시지에 대한 기본 time-to-live 값은 달리 지정되지 않은 경우 서명된 64비트 정수에 사용할 수 있는 최대값입니다.
  • 메시징 항목(큐 및 토픽)의 경우 기본 만료 시간도 Service Bus 표준 및 프리미엄 계층에 대해 서명된 64비트 정수에 대해 가능한 최대값입니다. Basic 계층의 경우 기본(최대) 만료 시간은 14일입니다.
  • 항목이 구독보다 작은 TTL을 지정하면 항목 TTL이 적용됩니다.

만료된 메시지는 배달하지 못한 편지 큐로 이동하는 옵션이 있습니다. 프로그래매틱 방식이나 Azure Portal를 사용하여 이 설정을 구성할 수 있습니다. 이 옵션을 사용하지 않도록 설정하면 만료된 메시지가 삭제됩니다. 배달 못한 메시지 큐로 이동되는 만료된 메시지는 브로커가 사용자 속성 섹션에 저장하는 dead-letter reason 속성을 평가하여 다른 배달 못한 메시지와 구분할 수 있습니다.

메시지가 잠금 상태이고 엔터티에 해당 플래그가 설정된 경우 만료되지 않도록 보호하면 메시지는 잠금이 중단되거나 만료될 때 배달 못한 메시지 큐로 이동됩니다. 그러나 명목상으로 만료되었더라도 메시지가 성공적으로 확인되고 애플리케이션이 성공적으로 처리했다고 가정되면 이 위치로 이동되지 않습니다. 메시지 잠금 및 해결에 대한 자세한 내용은 메시지 전송, 잠금 및 해결을 참조하세요.

time-to-live 및 만료 시 자동(및 트랜잭션) 배달 못한 메시지 큐는 마감일 내에 처리기 또는 처리기 그룹에 지정된 작업이 마감일 도달 시 처리를 위해 검색될지 여부를 확실히 설정할 수 있는 유용한 도구입니다.

예를 들어 확장이 제한된 백 엔드에서 작업을 안정적으로 실행해야 하며, 경우에 따라 트래픽 급증이 발생하거나 해당 백 엔드 가용성의 영향을 받지 않도록 하려는 웹 사이트가 있다고 가정해보겠습니다. 일반적인 경우 제출된 사용자 데이터에 대한 서버 쪽 처리기가 해당 정보를 큐에 밀어 넣고, 이후에 트랜잭션을 회신 큐로 성공적으로 처리했음을 확인하는 응답을 수신하게 됩니다. 트래픽이 급증하고 백 엔드 처리기가 시간 안에 해당 백로그 항목을 처리할 수 없는 경우 만료된 작업은 배달 못한 메시지 큐에 반환됩니다. 대화형 사용자에게 요청된 작업이 평소보다 약간 더 오래 걸린다고 알릴 수 있으며 요청은 처리 경로의 다른 큐에 배치될 수 있습니다. 이 경우 최종 처리 결과는 이메일로 사용자에게 전송됩니다.

세션 지원 엔터티 만료

세션이 사용하도록 설정된 큐 또는 항목 구독의 경우 메시지는 세션 수준에서 잠깁니다. 메시지의 TTL이 만료되면 해당 세션과 관련된 모든 메시지는 엔터티의 메시징 만료 설정에 사용하도록 설정된 데드레터링에 따라 삭제되거나 데드레터링됩니다. 즉, 세션에 TTL을 통과한 단일 메시지가 있으면 해당 세션의 모든 메시지가 만료됩니다. 활성 수신기가 있는 경우에만 메시지가 만료됩니다.

임시 엔터티

Service Bus 큐, 토픽 및 구독을 임시 엔터티로 생성할 수 있습니다. 이러한 항목은 지정된 기간 동안 사용되지 않으면 자동으로 제거됩니다.

자동 정리 기능은 테스트 또는 디버깅 실행이 중단되기 때문에 엔터티가 동적으로 생성되고 사용 후에 정리되지 않는 개발 및 테스트 시나리오에 유용합니다. 이 기능은 애플리케이션이 응답을 웹 서버 프로세스로 다시 수신하거나 비교적 수명이 짧아서 개체 인스턴스가 사라질 때 해당 엔터티를 안정적으로 정리하기 어려운 개체로 다시 수신하기 위해 회신 큐와 같은 동적 엔터티를 만들 경우에도 유용합니다.

이 기능은 네임스페이스의 유휴 상태에서 자동 삭제 속성을 사용하여 설정됩니다. 이 속성은 엔터티를 자동으로 삭제하기까지 유휴(사용되지 않은) 상태를 유지해야 하는 기간으로 설정됩니다. 이 속성에 대한 최소값은 5분입니다.

Important

Azure Resource Manager 잠금 수준을 네임스페이스 또는 더 높은 수준에서 CanNotDelete로 설정해도 AutoDeleteOnIdle가 있는 엔터티가 삭제되는 것을 방지하지 않습니다. 엔터티를 삭제하지 않으려면 AutoDeleteOnIdle 속성을 DataTime.MaxValue로 설정합니다.

끊김

엔터티(큐, 토픽 및 구독) 끊김 시 고려할 사항입니다.

Entity 유휴 상태로 간주되는 항목
Queue
  • 전송 없음
  • 수신 없음
  • 큐 업데이트 없음
  • 예약된 메시지 없음
  • Browse/Peek 없음
항목
  • 전송 없음
  • 토픽 업데이트 없음
  • 예약된 메시지 없음
  • 토픽의 구독에 대한 작업 없음(다음 행 참조)
구독
  • 수신 없음
  • 구독 업데이트 없음
  • 구독에 추가된 새 규칙 없음
  • Browse/Peek 없음

Important

큐 또는 구독에 자동 전달 설정이 있는 경우 이는 수신자가 큐 또는 구독에서 수신하도록 하는 것과 같으며 유휴 상태가 아닙니다.

SDK

다음 단계

Service Bus 메시징에 대해 자세히 알아보려면 다음 문서를 참조하세요.