Сетка событий Azure поддерживает CustomInputSchema только для пользовательских тем и доменов событий. Другими словами, встроенные источники событий AEG могут распространяться только с EventGridSchema (схема по умолчанию) или CloudEventV01Schema.
Для вашего решения, когда вашему потребителю требуется подписаться на события AEG с помощью пользовательской схемы, необходимо связать события с пользовательской темой с помощью CustomInputSchema . Следующий фрагмент экрана показывает эту концепцию:
Для создания цепочки тем (интегратор) может использоваться безсерверная функция Azure или Api Management. В моем тесте (как показано на рисунке выше) была использована функция EventGridTrigger.
Интегратор несет ответственность за запуск конечной точки пользовательской темы AEG с помощью пользовательской схемы.
В следующем фрагменте кода показан пример интегратора EventGridTrigger:
#r "Newtonsoft.Json"
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
static HttpClient client = new HttpClient() { BaseAddress = new Uri (Environment.GetEnvironmentVariable("CustomTopicEndpointEventGrid")) };
public static async Task Run(JObject eventGridEvent, ILogger log)
{
log.LogInformation(eventGridEvent.ToString());
string url = $"{eventGridEvent["data"]?["url"]?.Value<string>()}";
if(!string.IsNullOrEmpty(url))
{
// Fire event
var response = await client.PostAsJsonAsync("", new[] { new { filename = url.Substring(url.LastIndexOf('/') + 1) } });
log.LogInformation(response.ToString());
}
await Task.CompletedTask;
}
Обратите внимание, что CustomInputSchema все еще находится в предварительном просмотре, поэтому для создания пользовательской темы с пользовательской схемой ввода следуйте документации здесь . Также можно использовать REST API, подробнее см. здесь .
Ниже приведен пример полезной нагрузки для создания настраиваемой темы с помощью CustomInputSchema с использованием API REST:
{
"location": "westus",
"tags": {
"tag1": "abcd",
"tag2": "ABCD"
},
"properties": {
"inputSchema": "CustomEventSchema",
"inputSchemaMapping": {
"properties": {
"id": {
"sourceField": null
},
"topic": {
"sourceField": null
},
"eventTime": {
"sourceField": null
},
"eventType": {
"sourceField": "myEventType",
"defaultValue": "BlobCreated"
},
"subject": {
"sourceField": "mySubject",
"defaultValue": "/containers/xmlinput/blobs"
},
"dataVersion": {
"sourceField": null,
"defaultValue": "1.0"
}
},
"inputSchemaMappingType": "Json"
}
}
}
Если у вас есть пользовательская тема с CustomInputSchema , за схемой доставки вывода будет следовать схема из ввода. В случае, когда ваша подписка на эту пользовательскую тему будет доставлена с EventGridSchema, то для доставки события будет применено вышеуказанное сопоставление