Service Bus 큐, 토픽 및 구독 검색
Service Bus에서 메시징 기능의 핵심을 형성하는 메시징 엔터티는 큐, 토픽 및 구독, 규칙/작업입니다.
큐
큐는 경쟁 관계인 소비자 한 명 이상에게 FIFO(선입 선출) 방식으로 메시지를 배달합니다. 즉, 받는 사람은 일반적으로 큐에 추가된 순서대로 메시지를 받고 처리합니다. 그리고 하나의 메시지 소비자만 각 메시지를 받고 처리합니다. 메시지는 큐에 영구적으로 저장되므로 공급자(보낸 사람)와 소비자(수신자)가 메시지를 동시에 처리할 필요가 없습니다.
관련 이점은 부하 평준화입니다. 이를 통해 생산자와 소비자는 다양한 속도로 메시지를 보내고 받을 수 있습니다. 많은 애플리케이션에서 시스템 부하는 시간에 따라 달라집니다. 그러나 각 작업 단위에 필요한 처리 시간은 일반적으로 일정합니다. 큐를 통해 메시지 생산자와 소비자를 중개한다는 것은 소비 애플리케이션이 최대 부하 대신 평균 부하만 처리하면 된다는 것을 의미합니다.
큐를 사용하여 메시지 생산자와 소비자 사이를 중개하면 구성 요소 간에 내재하는 느슨한 결합이 제공됩니다. 생산자와 소비자는 서로를 인식하지 못하므로, 생산자에게 아무런 영향을 미치지 않고도 소비자가 업그레이드될 수 있습니다.
Azure Portal, PowerShell, CLI 또는 Resource Manager 템플릿을 사용하여 큐를 만들 수 있습니다. 그런 다음 C#, Java, Python, JavaScript로 작성된 클라이언트를 사용하여 메시지를 보내고 받습니다.
수신 모드
Service Bus에서 메시지를 수신하는 두 가지 모드인 수신 및 삭제 또는 잠금 피킹을 지정할 수 있습니다.
수신 및 삭제
이 모드에서는 Service Bus가 소비자로부터 요청을 받으면 메시지를 사용됨으로 표시하고 소비자 애플리케이션에 반환합니다. 이 모드는 가장 간단한 모델입니다. 이 방법은 장애가 발생해도 애플리케이션이 메시지를 처리하지 않아도 되는 시나리오에서 가장 효과적입니다. 예를 들어 소비자가 수신 요청을 실행한 후 처리하기 전에 크래시되는 시나리오를 고려해 보세요. Service Bus가 메시지를 사용됨으로 표시하기 때문에 애플리케이션은 다시 시작할 때 메시지를 사용하기 시작합니다. 크래시 전에 사용된 메시지는 누락됩니다.
보기 잠금
이 모드에서는 수신 작업이 2단계이며, 메시지가 누락되면 안 되는 애플리케이션을 지원할 수 있습니다.
소비할 다음 메시지를 찾아서 다른 소비자가 수신하지 못하도록 잠근 다음, 해당 메시지를 애플리케이션으로 반환합니다.
애플리케이션이 메시지 처리를 완료하면 Service Bus 서비스에 수신 프로세스의 두 번째 단계를 완료하도록 요청합니다. 그런 다음, 서비스는 메시지를 사용된 것으로 표시합니다.
애플리케이션이 어떤 이유로 메시지를 처리할 수 없는 경우 Service Bus 서비스에 메시지를 중단 하도록 요청할 수 있습니다. Service Bus 는 메시지를 잠금 해제 하고 동일한 소비자 또는 다른 경쟁 소비자가 메시지를 다시 받을 수 있도록 합니다. 둘째, 잠금과 관련된 시간 제한이 있습니다. 애플리케이션이 잠금 시간 제한이 만료되기 전에 메시지를 처리하지 못하면 Service Bus가 메시지의 잠금을 해제하고 다시 수신할 수 있도록 합니다.
토픽 및 구독:
큐를 사용하면 단일 소비자가 메시지를 처리할 수 있습니다. 큐와 달리 토픽 및 구독은 게시 및 구독 패턴에서 일대다 형태의 통신을 제공합니다. 이는 많은 수의 수신자로 크기 조정하는 데 유용합니다. 게시된 각 메시지는 해당 항목에 등록된 각 구독에서 사용할 수 있습니다. 게시자가 항목에 메시지를 보내면 한 명 이상의 구독자가 메시지 복사본을 받습니다.
구독은 수신하려는 메시지를 제한하기 위해 추가 필터를 사용할 수 있습니다. 게시자는 큐에 메시지를 보내는 것과 같은 방식으로 항목에 메시지를 보냅니다. 하지만 소비자는 항목으로부터 직접 메시지를 받지 못합니다. 대신 소비자는 해당 항목의 구독으로부터 메시지를 받습니다. 토픽 구독은 토픽으로 전송되는 메시지의 복사본을 수신하는 가상 큐와 유사합니다. 소비자는 큐에서 메시지를 받는 것과 동일한 방식으로 구독에서 메시지를 받습니다.
큐의 메시지 전송 기능은 항목에 직접 매핑되고, 메시지 수신 기능은 구독에 매핑됩니다. 무엇보다도 이 기능은 구독이 경쟁 소비자, 임시 분리, 부하 평준화 및 부하 분산과 같은 큐와 관련하여 이 섹션의 앞에서 설명한 것과 동일한 패턴을 지원한다는 것을 의미합니다.
규칙 및 작업
많은 시나리오에서 특정 특성이 있는 메시지는 다른 방식으로 처리해야 합니다. 이러한 처리를 사용하려면 원하는 속성이 있는 메시지를 찾도록 구독을 구성한 다음 해당 속성에 대한 특정 수정을 수행할 수 있습니다. Service Bus 구독은 토픽으로 전송된 모든 메시지를 볼 수 있지만, 해당 메시지의 하위 집합만 가상 구독 큐에 복사할 수 있습니다. 이 필터링은 구독 필터를 사용하여 수행됩니다. 이러한 수정을 필터 작업이라고 합니다. 구독이 만들어지면 메시지 속성에 적용되는 필터 식을 제공할 수 있습니다. 속성은 시스템 속성(예: Label) 및 사용자 지정 애플리케이션 속성(예: StoreName)일 수 있습니다. 이 경우 SQL 필터 식은 선택 사항입니다. SQL 필터 식이 없으면 구독에 정의된 필터 작업은 해당 구독의 모든 메시지에 대해 수행됩니다.