Azure Service Bus-Event Grid 통합 개요
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"
}]
이벤트 속성
이벤트에는 다음과 같은 최상위 데이터가 있습니다.
속성 | Type | Description |
---|---|---|
topic |
string | 이벤트 원본에 대한 전체 리소스 경로입니다. 이 필드는 쓸 수 없습니다. Event Grid는 이 값을 제공합니다. |
subject |
string | 게시자가 정의한 이벤트 주체의 경로입니다. |
eventType |
string | 이 이벤트 원본에 대해 등록된 이벤트 유형 중 하나입니다. |
eventTime |
string | 공급자의 UTC 시간을 기준으로 이벤트가 생성되는 시간입니다. |
id |
string | 이벤트에 대한 고유 식별자입니다. |
data |
개체 | Blob Storage 이벤트 데이터입니다. |
dataVersion |
string | 데이터 개체의 스키마 버전입니다. 게시자가 스키마 버전을 정의합니다. |
metadataVersion |
string | 이벤트 메타데이터의 스키마 버전입니다. Event Grid는 최상위 속성의 스키마를 정의합니다. Event Grid는 이 값을 제공합니다. |
데이터 개체의 속성은 다음과 같습니다.
속성 | Type | Description |
---|---|---|
namespaceName |
string | 리소스가 있는 Service Bus 네임스페이스입니다. |
requestUri |
string | 이벤트를 내보내는 특정 큐 또는 구독의 URI입니다. |
entityType |
string | 이벤트를 내보내는 Service Bus 엔터티의 유형(큐 또는 구독)입니다. |
queueName |
string | 큐를 구독하는 경우 활성 메시지가 있는 큐입니다. 토픽/구독을 사용하는 경우 값이 null입니다. |
topicName |
string | 활성 메시지가 있는 Service Bus 구독이 속하는 토픽입니다. 큐를 사용하는 경우 null 값입니다. |
subscriptionName |
string | 활성 메시지가 있는 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에서 제공하는 시작 문자 또는 끝 문자 필터를 사용하면 됩니다. 일부 인터페이스에서는 해당 필터를 사전 및 접미사 필터라고 합니다. 전부는 아니지만 여러 큐 및 구독에 대한 이벤트를 발생시키려는 경우 여러 개의 Event Grid 구독을 만들고 각각에 필터를 제공하면 됩니다.
다음 단계
다음 자습서를 참조하세요.