我想在将文件添加到 Azure 文件共享时触发 Azure 函数。我没有看到任何关于此的文档。是否支持?我将如何完成它?
摘要:我直接在 Visual Studio 中编写一个函数,该函数的设计结果是在门户中进行只读函数管理。我的问题是如何轻松地为所述 webhook 创建一个功能键?
上下文:我正在尝试将通用 Webhook 连接到事件网格。这个过程让我走上了一条需要触发 SubscriptionValidationEvent 的道路,这反过来又要求我的 webhook 在 URL 上提供一个“代码”,我假设它是一个功能键。
另外,在我投票之前,我非常清楚这里已经提出和回答了这个问题的多种变体。我已经尝试过所有这些方法,但出于某种原因,涉及使用 Kudu 凭据针对记录不充分的 Keys API 编写 PowerShell 的解决方案似乎都不适合我。
我希望有人知道一种使用 CLI 解决此问题的方法,或者更简单的方法,即functionName.json手动创建一个文件并将其放入 Secrets 目录中。
最后,尽管使用预发布的 EventGrid 绑定对我来说很诱人,但我目前无法在我的环境中推送预发布代码。
azure azure-functions azure-functions-runtime azure-eventgrid azure-functions-core-tools
我已经实现了一个 EventGrid 触发器来响应 Blob 存储事件,其逻辑简化如下:
public static async void Run(
JObject eventGridEvent,
TraceWriter log,
ExecutionContext context)
{
string eventContent = ParseEvent(eventGridEvent);
HttpClient client = GetProxyClient();
HttpResponseMessage response = await client.GetAsync("blabla/" + eventContent);
string responseContent = await response.Content.ReadAsStringAsync();
log.Info("Here is the response :" + responseContent);
}
Run Code Online (Sandbox Code Playgroud)
外部 API 响应时间不长(1 秒或更短),我的主机配置设置为默认值(因此允许无限数量的并发调用)。
同时添加多个 blob(从 2 个 blob 开始)时,我在日志中收到了大量重复事件(脚本正在快速地一个接一个地上传 blob,中间没有等待时间)。
我觉得这可能是因为我从不承认接收到事件,而且我不知道是否应该在我的代码中执行此操作,或者 EventGrid 触发器是否会自动执行此操作。
确认事件处理的逻辑应该在 EventGrid 触发器(Http 200 响应)中实现还是自动处理?
如果不是,我应该仍然收到重复的事件吗?通常,在上传单个 blob 时,我会收到 3-4 次事件。
我问这个问题的原因是,当使用 Http 触发器并返回 400 响应时,我也会得到重复的事件,这是有道理的,因为我没有承认正确处理了事件。但是,当我返回 200 响应时,我不会收到重复的事件。
谢谢
我知道我可以使用 listKeys/listSecrets 方法获取 ARM 模板中 Azure 函数的主机密钥和 trigger_url。但我需要系统密钥,我正在部署事件网格订阅,它需要包含系统密钥的 Azure Function 端点 url:
"resources": [
{
"type": "Microsoft.Storage/StorageAccounts/providers/eventSubscriptions",
"name": "[concat(concat(parameters('publisherName'), '/Microsoft.EventGrid/'), parameters('name'))]",
"apiVersion": "2018-01-01",
"properties": {
"destination": {
"endpointType": "[parameters('endpointType')]",
"properties": {
"endpointUrl": "[parameters('endpointUrl')]"
}
},
"filter": {
"subjectBeginsWith": "[parameters('subjectBeginsWith')]",
"subjectEndsWith": "[parameters('subjectEndsWith')]",
"subjectIsCaseSensitive": "[parameters('subjectIsCaseSensitive')]",
"includedEventTypes": "[parameters('includedEventTypes')]"
},
"labels": "[parameters('labels')]"
}
}
]
Run Code Online (Sandbox Code Playgroud)
其中endpointUrl 的形式为:
https://<function-app-name>.azurewebsites.net/admin/extensions/EventGridExtensionConfig?functionName=<function-name>&code=XZvGU0ROPxxxxxxxxxxxxxxxxxxxxxxxxxxxxaaieD89gPQ==
Run Code Online (Sandbox Code Playgroud)
名为“code”的参数是系统密钥,可以通过执行 GET 来检索
http://<function-app-name>.azurewebsites.net/admin/host/systemkeys/eventgridextensionconfig_extension?code=<master_key>
Run Code Online (Sandbox Code Playgroud)
有没有办法在 ARM 模板中检索此系统密钥(或整个端点网址),而无需借助注入它或其他外部系统的 bash 脚本?
该文档确实说:“但是,您不能使用需要请求正文中的值的列表操作。” 所以我认为我无法进行“列表”操作。
请原谅我的术语有点不对;我是新手。
我创建了一个 Azure 事件网格订阅,每当我将文件上传到 blob 存储时都会触发一个事件。我有一个响应此事件的 Azure 函数。我终于让这一切正常工作了,但是我有一些来自以前(错误)上传的遗留消息,这些消息定期失败(从相关 Azure 功能的 Azure 门户中的日志窗口查看)。就好像它们存储在某个队列中并定期重试,但我不确定它是否是这样工作的。
无论如何,我希望能够做的是清除任何传输中或排队的事件,但我不知道在哪里可以找到它们来执行此操作。据我所知,它们只是漂浮在以太中。
如何清除这些事件,以免它们在随机时间不断触发我的 Azure 函数?
我已经按照Microsoft 教程处理基于 Azure 存储中创建的 blob 的事件。
事件正在触发,但处理图像的事件代码被绕过,因为 EventGrid 事件未填充输入流参数。这应该通过 blob(图像文件)的路径进行处理。
public static async Task Run(
[EventGridTrigger]EventGridEvent eventGridEvent,
[Blob("{data.url}", FileAccess.Read)] Stream input,
ILogger log)
{
try
{
log.LogInformation("Entered Thumbnail Function ..");
if (input != null)
{ //doesn't get to here ..
Run Code Online (Sandbox Code Playgroud)
每次事件触发的日志是
2018-11-15T05:33:41.096 [Information] Executing 'Thumbnail' (Reason='EventGrid trigger fired at 2018-11-15T05:33:41.0781270+00:00' ..
2018-11-15T05:33:41.096 [Information] Entered Thumbnail Function
2018-11-15T05:33:41.096 [Information] Executed 'Thumbnail' (Succeeded,
2018-11-15T05:33:41.096 [Information] Executing 'Thumbnail' (Reason='EventGrid trigger fired at 2018-11-15T05:33:41.0781270+00:00',
2018-11-15T05:33:41.096 [Information] Entered Thumbnail Function
2018-11-15T05:33:41.096 [Information] Executed …Run Code Online (Sandbox Code Playgroud) 我正在开发一个服务结构应用程序,想要从此应用程序发布一些事件,并在另一个应用程序中订阅或处理这些发布事件。
我尝试过 EventGrid 概念,并观察到发布和处理事件时存在延迟。所以,现在我正在寻找其他替代方案,例如 EventHub 或队列等。
如果有人已经使用过 EventGrid、EventHud 或 Queues 等,请建议当我们处理更多事件时,哪一个会提供更好的性能。
设计方法
我们已将表从 SQL 服务迁移到 Service Fabric。SQL Service 中有一个视图,我们计划将其实现为 Service Fabric 中的服务。
实现逻辑如下。
我们正在寻找一种能够提供更高性能的消息传递服务。
event-handling azure azure-eventhub azure-service-fabric azure-eventgrid
我在事件网格上发送事件。我可以看到他们到达了蔚蓝的仪表板
NomeEmailChange yay = new NomeEmailChange
{
Nome = "cesco",
Email = "cesco"
};
var primaryTopicKey = _config["EventGridConfig:AcessKey"];
var primaryTopic = _config["EventGridConfig:Endpoint"];
var primaryTopicHostname = new Uri(primaryTopic).Host;
var topicCredentials = new TopicCredentials(primaryTopicKey);
var client = new EventGridClient(topicCredentials);
var id = Guid.NewGuid().ToString();
var hey = new List<EventGridEvent>
{
new EventGridEvent()
{
Id = id,
EventType = "cesco-cesco",
Data = (yay),
EventTime = DateTime.Now,
Subject = "MS_Clientes",
DataVersion = "1.0",
}
};
;
client.PublishEventsAsync(primaryTopicHostname, hey);
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个事件网格订阅。我可以确认到达事件网格订阅的事件网格消息。
在另一个项目中,我订阅了如下所示的服务总线。它适用于使用直接发送到总线的消息。
public static IServiceCollection AddBus(this IServiceCollection …Run Code Online (Sandbox Code Playgroud) 可以说事件网格只是服务总线的一个子集吗?我发现服务总线可以做事件网格可以做的一切,甚至更多。
我正在使用 Azure 事件网格发送自定义事件。一切正常,但现在我想创建一个健康检查服务,它会探测我的所有服务以查看它们是否正常工作。为此,我使用AspNetCore.Diagnostics.HealthChecks。但它不支持 Azure 事件网格。
有没有办法可以在不发送实际事件的情况下探测事件网格来检查它是否正常工作?