gpt4 book ai didi

使用 Cloud Event Schema v1.0 进行 Azure 事件网格高级过滤

转载 作者:行者123 更新时间:2023-12-02 07:04:05 25 4
gpt4 key购买 nike

我正在使用事件网格来通信两个不同的微服务。为此,我创建了一个主题和订阅:

  • 具有云事件架构 v1.0 的事件网格主题
  • 使用 Cloud Event Schema v1.0 进行事件网格订阅

事件已正确发送和接收。但是,我正在尝试添加基于 CloudEvent 的“源”字段的高级过滤,如图所示。一切似乎都已正确配置,但我正在接收订阅中的所有事件,无论事件的来源如何。

enter image description here

知道我在这里会错过什么吗?

最佳答案

CloudEventV01Schema中,source属性由topicsubject值以及分隔符#组成,请参阅以下内容:

source = topic#subject

使用OperatorType = StringNotIn需要匹配的完整值,例如在您的情况下 值。

主题和分隔符#添加到您的主题(例如 https://my-source.azurewebsites.net/ )将解决您的问题。

自定义主题示例:

/subscriptions/yourSubscriptionId/resourceGroups/yourResourceGroup/providers/Microsoft.EventGrid/topics/yourTopic#https://my-source.azurewebsites.net/

请投票adding more operationTypes in the AdvancedFilters ,您可以使用 operationType = StringNotEndsWith 轻松处理您的问题。

更新:

CloudEventSchemaV1_0 中是 AEG 主题表示的 source 属性,请参阅 storage producer 的示例。在您的情况(例如自定义主题)中,源将具有自定义主题资源 ID 的值。

换句话说,对 source 属性使用优势过滤是没有用的,因为 AEG Pub/Sub 事件模型仅支持订阅一个特定主题(一个主题的一个订阅)。

请注意,使用事件域主题而不是自定义主题,source 属性表示为单个事件域中的主题,我们可以在其中过滤源(域主题)以进行消费或直接订阅此源(域主题)。

总之,当前的公共(public)预览版 (api-version=2020-01-01-preview) 不支持您对源高级过滤的期望 属性。

更新2:

我创建了一个issue与通过 AEG 自定义主题端点使用 CloudEvents v 1.0 相关。

同时,您的解决方案可以使用以下解决方法:

 Event Grid Topic with CustomInputSchema
Event Grid Subscription with CustomInputSchema (or CloudEventSchemaV1_0)

示例:

使用 REST API 创建自定义主题具有以下有效负载:

{
"location":"westus",
"tags":{
"tag1":"abcd",
"tag2":"ABCD"
},
"properties":{
"inputSchema":"CustomEventSchema",
"inputSchemaMapping":{
"properties":{
"id":{
"sourceField":null
},
"topic":{
"sourceField":null
},
"eventTime":{
"sourceField":null
},
"eventType":{
"sourceField":null,
"defaultValue":"DefaultEventType"
},
"subject":{
"sourceField":null,
"defaultValue":"DefaultSubject"
},
"dataVersion":{
"sourceField":null,
"defaultValue":"1.0"
}
},
"inputSchemaMappingType":"Json"
}
}
}

上述自定义映射将允许绕过从自定义主题端点到订阅者的任何事件架构。如果订阅者声明为使用 CloudEvents v 1.0 的传递架构,则事件将由 CloudEventSchemaV1_0 信封包装。

在此解决方法中,事件消息必须位于数组中,请参阅以下示例:

[
{
"id":"00000000-0000-0000-0000-000000000000",
"source":"https://my-source.azerwebsites.net/",
"specversion":"1.0",
"type":"recordInserted",
"dataschema":"#1.0",
"subject":"/myapp/vehicles/motorcycles",
"time":"2019-11-23T16:43:22.5111403Z",
"data":{
"make":"Ducati",
"model":"Monster"
}
}
]

请注意,这种按数组包装的自定义输入模式应与 CloudEvents 相同的方式处理,例如将单个事件作为 JObject 以及将批处理作为 JArray,查看我报告的问题 here .

如您所见,上述事件消息是 CloudEvents v 1.0 消息,在此解决方法中,您可以对 source 属性使用高级过滤。

关于使用 Cloud Event Schema v1.0 进行 Azure 事件网格高级过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58953980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com