Service Bus는 수신자가 없을 때 큐 또는 구독에 메시지가 있는 경우 Event Grid에 이벤트를 내보낼 수 있습니다. Service Bus 네임스페이스에 대한 Event Grid 구독을 만들고, 이러한 이벤트를 수신 대기한 다음, 수신기를 시작하여 이벤트에 대응할 수 있습니다. 이 기능을 사용하면 반응형 프로그래밍 모델에서 Service Bus를 사용할 수 있습니다. 이 기능의 주요 시나리오는 메시지 볼륨이 적은 Service Bus 큐 또는 구독에 지속적으로 메시지를 폴링하는 수신기가 필요하지 않다는 것입니다.
이 기능을 사용하려면 다음 항목이 필요합니다.
- 하나 이상의 Service Bus 큐를 포함한 Service Bus 프리미엄 네임스페이스 또는 하나 이상의 구독을 포함한 Service Bus 토픽.
- Service Bus 네임스페이스에 대한 참가자 액세스. Azure Portal에서 Service Bus 네임스페이스로 이동한 다음 , 액세스 제어(IAM)를 선택하고 역할 할당 탭을 선택합니다. 네임스페이스에 대한 기여자 액세스 권한이 있는지 확인합니다.
- 또한 Service Bus 네임스페이스에 대한 Event Grid 구독이 필요합니다. 이 구독은 Event Grid에서 선택할 메시지가 있다는 알림을 받습니다. 일반적인 구독 대상에는 Azure App Service의 Logic Apps 기능, Azure Functions, 또는 웹앱에 연락하는 웹후크가 포함될 수 있습니다. 그러면 구독자가 메시지를 처리합니다.
사용할 수 있는 이벤트 유형
Service Bus는 다음 이벤트 유형을 내보낸다.
| 이벤트 유형 | 설명 |
|---|---|
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners |
새 활성 메시지가 큐 또는 구독에 도착했으나 수신하는 리스너가 없을 때 트리거됩니다. |
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners |
새로운 활성 메시지가 사장된 메시지 큐에 도착하고 활성 수신기가 없을 때 발생합니다. |
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications |
특정 큐 또는 구독에 활성 수신기가 있더라도 큐 또는 구독에 활성 메시지가 있는 경우 30초마다 발생합니다. 활성 메시지 수가 0에서 큐 또는 구독의 양수 값으로 전환될 때에도 이 이벤트가 발생합니다. |
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications |
메시지가 특정 큐 또는 구독의 사망 편지 엔터티에 있으면, 해당 큐 또는 구독의 사망 편지 엔터티에 활성 수신기가 있어도 30초마다 한 번씩 트리거됩니다. 죽은 편지 메시지 수가 큐 또는 구독의 죽은 편지 개체에 대해 0에서 양수 값으로 전환될 때도 발생합니다. |
예제 이벤트
수신기 없이 사용할 수 있는 활성 메시지
이 이벤트는 큐 또는 구독에 활성 메시지가 있고 수신 대기 중인 수신기가 없는 경우에 생성됩니다.
[{
"topic": "/subscriptions/{subscription-id}/resourcegroups/{your-rg}/providers/Microsoft.ServiceBus/namespaces/{your-service-bus-namespace}",
"subject": "topics/{your-service-bus-topic}/subscriptions/{your-service-bus-subscription}",
"eventType": "Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners",
"eventTime": "2018-02-14T05:12:53.4133526Z",
"id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
"data": {
"namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
"requestUri": "https://{your-service-bus-namespace}.servicebus.windows.net/{your-topic}/subscriptions/{your-service-bus-subscription}/messages/head",
"entityType": "subscriber",
"queueName": "QUEUE NAME IF QUEUE",
"topicName": "TOPIC NAME IF TOPIC",
"subscriptionName": "SUBSCRIPTION NAME"
},
"dataVersion": "1",
"metadataVersion": "1"
}]
리스너 없이 사용 가능한 데드 레터 메시지
데드레터 큐 이벤트에 대한 스키마는 비슷합니다. 메시지가 있고 활성 수신기가 없는 데드 레터 큐당 적어도 하나의 이벤트가 발생합니다.
[{
"topic": "/subscriptions/{subscription-id}/resourcegroups/{your-rg}/providers/Microsoft.ServiceBus/namespaces/{your-service-bus-namespace}",
"subject": "topics/{your-service-bus-topic}/subscriptions/{your-service-bus-subscription}",
"eventType": "Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners",
"eventTime": "2018-02-14T05:12:53.4133526Z",
"id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
"data": {
"namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
"requestUri": "https://{your-service-bus-namespace}.servicebus.windows.net/{your-topic}/subscriptions/{your-service-bus-subscription}/$deadletterqueue/messages/head",
"entityType": "subscriber",
"queueName": "QUEUE NAME IF QUEUE",
"topicName": "TOPIC NAME IF TOPIC",
"subscriptionName": "SUBSCRIPTION NAME"
},
"dataVersion": "1",
"metadataVersion": "1"
}]
활성 메시지 사용 가능한 정기 알림
이 이벤트는 특정 큐 또는 구독에 대한 활성 수신기가 있더라도 특정 큐 또는 구독에 활성 메시지가 있는 경우 주기적으로 생성됩니다.
[{
"topic": "/subscriptions/<subscription id>/resourcegroups/DemoGroup/providers/Microsoft.ServiceBus/namespaces/<YOUR SERVICE BUS NAMESPACE WILL SHOW HERE>",
"subject": "topics/<service bus topic>/subscriptions/<service bus subscription>",
"eventType": "Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications",
"eventTime": "2018-02-14T05:12:53.4133526Z",
"id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
"data": {
"namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
"requestUri": "https://YOUR-SERVICE-BUS-NAMESPACE-WILL-SHOW-HERE.servicebus.windows.net/TOPIC-NAME/subscriptions/SUBSCRIPTIONNAME/$deadletterqueue/messages/head",
"entityType": "subscriber",
"queueName": "QUEUE NAME IF QUEUE",
"topicName": "TOPIC NAME IF TOPIC",
"subscriptionName": "SUBSCRIPTION NAME"
},
"dataVersion": "1",
"metadataVersion": "1"
}]
전달 실패 메시지에 대한 정기 알림 제공
특정 큐 또는 구독에 배달 실패 메시지가 있을 경우, 이 이벤트는 그 큐 또는 구독의 배달 실패 엔터티에 활성 수신기가 있더라도 주기적으로 생성됩니다.
[{
"topic": "/subscriptions/<subscription id>/resourcegroups/DemoGroup/providers/Microsoft.ServiceBus/namespaces/<YOUR SERVICE BUS NAMESPACE WILL SHOW HERE>",
"subject": "topics/<service bus topic>/subscriptions/<service bus subscription>",
"eventType": "Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications",
"eventTime": "2018-02-14T05:12:53.4133526Z",
"id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
"data": {
"namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
"requestUri": "https://YOUR-SERVICE-BUS-NAMESPACE-WILL-SHOW-HERE.servicebus.windows.net/TOPIC-NAME/subscriptions/SUBSCRIPTIONNAME/$deadletterqueue/messages/head",
"entityType": "subscriber",
"queueName": "QUEUE NAME IF QUEUE",
"topicName": "TOPIC NAME IF TOPIC",
"subscriptionName": "SUBSCRIPTION NAME"
},
"dataVersion": "1",
"metadataVersion": "1"
}]
이벤트 속성
이벤트에는 다음과 같은 최상위 데이터가 있습니다.
| 재산 | 유형 | 설명 |
|---|---|---|
topic |
문자열 | 이벤트 원본에 대한 전체 리소스 경로입니다. 이 필드는 쓸 수 없습니다. Event Grid는 이 값을 제공합니다. |
subject |
문자열 | 이벤트 대상에 대한 게시자가 정의한 경로입니다. |
eventType |
문자열 | 이 이벤트 원본에 대해 등록된 이벤트 유형 중 하나입니다. |
eventTime |
문자열 | 공급자의 UTC 시간을 기준으로 이벤트가 생성되는 시간입니다. |
id |
문자열 | 이벤트의 고유 식별자입니다. |
data |
객체 | Service Bus 이벤트 데이터입니다. |
dataVersion |
문자열 | 데이터 개체의 스키마 버전입니다. 게시자는 스키마 버전을 정의합니다. |
metadataVersion |
문자열 | 이벤트 메타데이터의 스키마 버전입니다. Event Grid는 최상위 속성의 스키마를 정의합니다. Event Grid는 이 값을 제공합니다. |
데이터 개체의 속성은 다음과 같습니다.
| 재산 | 유형 | 설명 |
|---|---|---|
namespaceName |
문자열 | 리소스가 있는 Service Bus 네임스페이스입니다. |
requestUri |
문자열 | 이벤트를 내보내는 특정 큐 또는 구독에 대한 URI입니다. |
entityType |
문자열 | 이벤트를 발생시키는 서비스 버스 엔터티의 종류(큐 또는 구독)입니다. |
queueName |
문자열 | 큐를 구독하는 경우 활성 메시지가 있는 큐입니다. 토픽/구독을 사용하는 경우 값 null입니다. |
topicName |
문자열 | 활성 메시지가 있는 Service Bus 구독이 속한 항목입니다. 큐를 사용하는 경우 값 null입니다. |
subscriptionName |
문자열 | 활성 메시지가 있는 Service Bus 구독입니다. 큐를 사용하는 경우 값 null입니다. |
Service Bus 네임스페이스에 대한 Event Grid 구독
다음과 같은 세 가지 방법으로 Service Bus 네임스페이스에 대한 Event Grid 구독을 만들 수 있습니다.
- Azure Portal. Azure Portal을 사용하여 Azure Logic Apps 및 Azure Functions를 처리기로 사용하여 Service Bus 이벤트에 대한 Event Grid 구독을 만드는 방법을 알아보려면 다음 자습서를 참조하세요.
Azure CLI. 다음 CLI 예제에서는 Service Bus 네임스페이스에서 만든 시스템 토픽 에 대한 Azure Functions 구독을 만드는 방법을 보여 줍니다.
namespaceid=$(az resource show --namespace Microsoft.ServiceBus --resource-type namespaces --name "<service bus namespace>" --resource-group "<resource group that contains the service bus namespace>" --query id --output tsv az eventgrid event-subscription create --resource-id $namespaceid --name "<YOUR EVENT GRID SUBSCRIPTION NAME>" --endpoint "<your_endpoint_url>" --subject-ends-with "<YOUR SERVICE BUS SUBSCRIPTION NAME>"
- PowerShell을 사용하여 키 백업 파일 복원 예를 들어 다음과 같습니다:
$namespaceID = (Get-AzServiceBusNamespace -ResourceGroupName "<YOUR RESOURCE GROUP NAME>" -NamespaceName "<YOUR NAMESPACE NAME>").Id New-AzEVentGridSubscription -EventSubscriptionName "<YOUR EVENT GRID SUBSCRIPTION NAME>" -ResourceId $namespaceID -Endpoint "<YOUR ENDPOINT URL>” -SubjectEndsWith "<YOUR SERVICE BUS SUBSCRIPTION NAME>"
내보낸 이벤트 수와 빈도는 얼마인가요?
네임스페이스에 큐와 토픽 또는 구독이 여러 개 있는 경우 큐당 하나 이상의 이벤트와 구독당 하나씩 이벤트가 발생합니다. Service Bus 엔터티에 메시지가 없고 새 메시지가 도착하는 경우 이벤트가 즉시 내보내집니다. 또는 Service Bus가 활성 수신기를 검색하지 않는 한 2분마다 이벤트가 내보내집니다. 메시지 검색은 이벤트를 중단하지 않습니다.
기본적으로 Service Bus는 네임스페이스의 모든 엔터티에 대한 이벤트를 내보냅니다. 특정 엔터티에 대한 이벤트만 얻으려면 다음 섹션을 참조하세요.
필터를 사용하여 이벤트를 가져오는 위치 제한
예를 들어 네임스페이스 내에서 하나의 큐나 하나의 구독에서만 이벤트를 얻으려면, Event Grid에서 제공하는 Begins with 필터 또는 Ends with 필터를 사용할 수 있습니다. 일부 인터페이스에서는 필터를 Pre 및 Suffix 필터라고 합니다. 큐 및 구독을 제외한 여러 개의 이벤트를 얻으려면 여러 Event Grid 구독을 만들고 각각에 대한 필터를 제공할 수 있습니다.
다음 단계
다음 자습서를 참조하세요.