【发布时间】:2019-12-23 19:44:46
【问题描述】:
我已通过事件中心订阅将我的 blob 存储帐户连接到事件网格,并且可以查看上传的 blob 中的事件。
但我希望能够为每个接收到的事件传递一些元数据,这样我就可以将事件与外键(客户标识符)相关联,而无需对每个事件进行额外的工作。
这可能吗?我在 API 文档中看不到任何关于此的内容。
【问题讨论】:
标签: azure-eventgrid
我已通过事件中心订阅将我的 blob 存储帐户连接到事件网格,并且可以查看上传的 blob 中的事件。
但我希望能够为每个接收到的事件传递一些元数据,这样我就可以将事件与外键(客户标识符)相关联,而无需对每个事件进行额外的工作。
这可能吗?我在 API 文档中看不到任何关于此的内容。
【问题讨论】:
标签: azure-eventgrid
基于Azure Event Grid event schema for Blob storage,Blob 存储事件数据中没有元数据属性。
请注意,只有一种特定情况将一些元数据从 AEG 订阅传递给其订阅者,例如 webhook 事件处理程序端点的查询字符串(例如 HttpTrigger 函数)。
您的方案的解决方案是使用带有输出绑定到事件中心的 EventGridTrigger 函数(订阅者)。
以下示例显示了使用 EventGridTrigger 函数的事件消息中介的轻量级实现:
[FunctionName("Function1")]
[return: EventHub("%myEventHub%", Connection = "AzureEventHubConnectionString")]
public async Task<JObject> Run([EventGridTrigger]JObject ed, ILogger log)
{
// original event message
log.LogInformation(ed.ToString());
// place for event data enrichment
var metadata = new { metadata = "ABCD", abcd = 12345 };
// enrich data object
ed["data"]["url"]?.Parent.AddAfterSelf(new JProperty("subscription", JObject.FromObject(metadata)));
// show after mediation
log.LogWarning(ed.ToString());
// forward to the Event Hub
return await Task.FromResult(ed);
}
以及事件中心的日志输出:
【讨论】: