azure - API 管理、函数和服务总线的端到端关联
问题描述
我对 Azure 上流程链的端到端关联有疑问。在看到 Mattias Lögdberg 的这篇精彩文章后,我想实现如下所示的关联链: 按照 Mattias 的步骤,我已经成功地实现了这一点,但是通过删除第二步并直接将消息发布到排队,链条断了。
新设置
- 用户调用API 管理
- API 管理调用ServiceBus(通过 REST)
- ServiceBus触发器功能
- 函数调用API 管理(函数 v3)
在第一次调用中,Diagnostic-Id标头设置为 w3c-traceparent标准,因此 ServiceBus 消息可以关联。这通过在入站部分执行以下策略来实现:
<set-header name="Diagnostic-Id" exists-action="override">
<value>@($"00-{context.RequestId.ToString("N")}-{String.Format("{0:x16}", new Random().Next(0x1000000))}-00")</value>
</set-header>
我是否缺少正确“总结”日志的内容?所有操作都具有相同的 operation_Id 和不同的 operation_parentId - 与使用函数的过程完全相同。
+++ 更新 19/11 +++
我的一个新发现是,相关性取决于 Request-Id 标头。但由于 ServiceBus 需要“诊断 ID”,APIM 生成的请求 ID 被忽略。尽管如此,我发现“抓住所有人”的最佳解决方法如下:
<set-header name="Diagnostic-Id" exists-action="override">
<value>@(context.Request.Headers.GetValueOrDefault("Request-Id", context.RequestId.ToString("N")}</value>
</set-header>
这可以确保来电显示得到尊重。如果没有调用方 Request-Id,则默认为 apim 生成的请求 id。它仍然不是具有“排队时间”功能的视图,但至少它是一个易于理解的解决方案。
解决方案
推荐阅读
- powershell - VisibleExternalCommands 中的通配符在 PSSessionConfiguration 中不起作用
- scala - Spark DataFrame,如何聚合列序列?
- java - selenium + phantomJS web 元素内部异常
- oracle - 我们如何在 oracle 中使用另一个模式的包的功能
- php - file_get_contents() 在不同机器上的工作方式不同
- tensorflow - 设置与 MobileNet 不同的架构
- sql-server - 如何从 Group By 中的复杂子查询中获取值?
- python - 如何在 Python 中展平嵌套的 Json 文件?
- php - 在 Woocommerce 3 中替换外部运输服务的付款方式标题
- excel - 带有 Application.GetSaveAsFilename 或 Application.Dialogs(xlDialogPrinterSetup) 的 excel vba 错误