azure事件网格中的订阅验证事件消息架构是什么


  1. 使用门户使用云事件模式创建了新的azure事件网格域
  2. 使用azure函数创建了新的web挂钩端点,该端点可以接收订阅验证事件和事件通知
  3. 使用门户为上述域创建了新的azure事件网格主题(作为以下订阅的一部分)
  4. 创建了新的azure事件网格订阅,该订阅具有以上web挂钩端点的云事件架构
  5. 创建订阅时,网格基础设施会使用订阅validadaton事件调用端点,以验证web挂钩端点

令我惊讶的是,验证事件结构(如下所示)似乎符合本地事件网格模式,而不是云事件模式:

[{
"id": "6309ef83-117f-47aa-a07c-50f6e71a8ca5",
"topic": "/subscriptions/13ad1203-e6d5-4076-bf2b-73465865f9f0/resourceGroups/xxxx-sandbox-rg/providers/Microsoft.EventGrid/domains/eg-xxx-test-cloud-domain/topics/eg-xxx-test-cloud-topic",
"subject": "",
"data": {
"validationCode": "391889BB-FCC3-4269-A2BD-0918B5BAB0AE",
"validationUrl": "https://rp-westus.eventgrid.azure.net/eventsubscriptions/xxxx-subscription-3/validate?id=391889BB-FCC3-4269-A2BD-0918B5BAB0AE&t=2019-01-30T15:45:37.0521594Z&apiVersion=2018-09-15-preview&[Hidden Credential]"
},
"eventType": "Microsoft.EventGrid.SubscriptionValidationEvent",
"eventTime": "2019-01-30T15:45:37.0521594Z",
"metadataVersion": "1",
"dataVersion": "2"
}]

我期望以下订阅验证事件符合云事件模式(基于上的0.1版本的云事件模式https://learn.microsoft.com/en-us/azure/event-grid/cloudevents-schema#cloudevent-架构):

{
"eventID" : "6309ef83-117f-47aa-a07c-50f6e71a8ca5",
"source" : "/subscriptions/13ad1203-e6d5-4076-bf2b-73465865f9f0/resourceGroups/xxxx-sandbox-rg/providers/Microsoft.EventGrid/domains/eg-xxx-test-cloud-domain/topics/eg-xxx-test-cloud-topic",
"data": {
"validationCode": "391889BB-FCC3-4269-A2BD-0918B5BAB0AE",
"validationUrl": "https://rp-westus.eventgrid.azure.net/eventsubscriptions/xxxx-subscription-3/validate?id=391889BB-FCC3-4269-A2BD-0918B5BAB0AE&t=2019-01-30T15:45:37.0521594Z&apiVersion=2018-09-15-preview&[Hidden Credential]"
},
"eventType" : "Microsoft.EventGrid.SubscriptionValidationEvent",
"eventTime" : "2019-01-30T15:45:37.0521594Z",
"cloudEventsVersion" : "0.1",
"eventTypeVersion" : "2",
}

我错过了什么?

基本上,webhook订阅者处理以下两组事件。特定的事件类型存储在http标头"aeg事件类型"中。

  1. 事件网格模型的内部事件,如eventTypesSubscriptionValidationSubscriptionDelegation。这些事件类型的模式始终与默认模式相同,例如EventGridSchema。换句话说,它不依赖于EventDeliverySchema。IMO,拥有内部事件的默认模式会产生强事件类型,特别是当我们拥有CustomInputSchema时。

  2. 兴趣源事件(主题)是由输入模式定义的事件,目前事件网格模型支持3种类型,如EventGridSchema(默认)、CloudEventSchemaCustomInputSchema。AEG支持以下模式输入/输出映射:

    1. EventGridSchema到交付架构EventGridSchemaCloudEventSchema
    2. CloudEventSchema到仅交付模式CloudSchemaSchema
    3. CustomInputSchema到交付架构EventGridSchemaCloudEventSchemaCustomInputSchema

    标头中的事件类型为:aeg event type=Notification,架构基于订阅的EventDeliverySchema(请参阅以下映射)。

基于以上内容,对于您的场景,您应该为内部事件(默认架构为EventGridSchema)和基于订阅的EventDeliverySchema的Notification事件有一个单独的强类型对象。

以下是http标头的示例:

aeg-subscription-name=EVENTGRIDSCHEMA
aeg-delivery-count=0
aeg-data-version=
aeg-metadata-version=0
aeg-event-type=SubscriptionValidation

注意,只有一个订阅名称来确定订阅了哪个EventDeliverySchema。最好有一个额外的aeg头,例如:aeg-subscriptionlabels,将一些订阅元数据传递给订阅者处理程序。

作为一种变通方法,我们可以通过url查询参数向订阅者webhook处理程序传递一些值,例如:&eds=自定义输入模式

这是云事件V0.1规范的Azure事件网格实现中的已知问题/预期行为。在Azure事件网格中实现云事件V0.1规范时,云事件标准中没有定义验证握手/滥用保护模型,因此事件网格的现有验证握手模型/架构也用于云事件订阅者。

相关内容

  • 没有找到相关文章

最新更新