在 CloudEventV01Schema 中,source 属性由带有分隔符的 topic 和 subject 值组成 # ,请参阅以下内容:
source = topic#subject
使用 OperatorType = StringNotIn 需要匹配 key 的完整值,例如在您的情况下 source 值。
将主题和分隔符#添加到您的主题(例如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 的示例。在您的情况下,例如自定义主题,源将具有自定义主题 resourceId 的值。
换句话说,对 source 属性使用优势过滤是没有用的,因为 AEG Pub/Sub 事件模型仅支持订阅 one 特定主题(一个订阅一个主题)。
注意,使用事件域主题而不是自定义主题,source 属性表示为单个事件域中的主题,我们可以在其中过滤源(域主题)以用于消费或直接订阅此来源(领域主题)。
总之,当前的公共预览版 (api-version=2020-01-01-preview) 不支持您对源上的高级过滤的期望 /em> 属性。
更新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 属性使用高级过滤。