Первый фоновый рабочий процесс запускает действие при поступлении рабочей нагрузки. Когда это будет сделано, он помещает его в очередь RabbitMQ. Я беру идентификатор текущего действия и помещаю его в заголовки сообщения. Рабочий 2 использует тот же метод, когда отправляет сообщение рабочему 3.
Код: Выделить всё
basicProperties.Headers = new Dictionary();
if (Activity.Current?.Id != null) {
basicProperties.Headers.Add(DiagnosticsHandlerLoggingStrings.TraceParentHeaderName, Activity.Current?.Id);
}
Код: Выделить всё
if (basicProperties.Headers?.TryGetValue(DiagnosticsHandlerLoggingStrings.TraceParentHeaderName, out var parentActivityIdRaw) == true &&
parentActivityIdRaw is Byte[] traceParentBytes) {
parentActivityId = Encoding.UTF8.GetString(traceParentBytes);
}
return activitySource.StartActivity("Incoming message from queue", kind: ActivityKind.Consumer, parentId: parentActivityId);
На странице трассировки в Aspire отображаются рабочий 1, рабочий 3 и вебапи. Не рабочий 2. Более того, ни одно из событий, которые я добавляю в рабочий 3, не отображается в подробном представлении, только события из HttpClient.
Как правильно продолжать деятельность, преодолевая границы? Кажется, что HttpClient, а также IHttpActivityFeature могут справиться с этим и фактически продолжают действие, но когда я использую Activity.Current в своем собственном коде, ничего не помещается в события действия, по крайней мере, это не отображается в деталях трассировки.
Глядя на трассировку, кажется, что я правильно настраиваю активность, но почему-то не могу сам добавлять в нее события, хотя HttpClient можно.
Подробнее здесь: https://stackoverflow.com/questions/792 ... s-in-net-8
Мобильная версия