首页 > 解决方案 > API 管理、函数和服务总线的端到端关联

问题描述

我对 Azure 上流程链的端到端关联有疑问。在看到 Mattias Lögdberg 的这篇精彩文章后,我想实现如下所示的关联链: 期望的状态 按照 Mattias 的步骤,我已经成功地实现了这一点,但是通过删除第二步并直接将消息发布到排队,链条断了。

新设置

  1. 用户调用API 管理
  2. API 管理调用ServiceBus(通过 REST)
  3. ServiceBus触发器功能
  4. 函数调用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。它仍然不是具有“排队时间”功能的视图,但至少它是一个易于理解的解决方案。

标签: azureazure-functionsazureservicebusazure-api-management

解决方案


推荐阅读