首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >服务总线消息中的masstransit访问活动

服务总线消息中的masstransit访问活动
EN

Stack Overflow用户
提问于 2019-08-19 17:27:39
回答 2查看 568关注 0票数 0

我正在通过服务总线在两个服务之间发送请求/响应(不要问为什么)。

我想建立自定义应用洞察力遥测。我知道ServiceBus消息添加了诊断元数据,这样消费者就可以提取它并使用它来添加服务之间的关联。但是,我不能在MassTransit中访问它,或者至少我不知道如何访问。

有小费吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-24 11:16:47

几个月过去了,我实现的解决方案证明是一个很好的解决方案。我创建了实现IReceiveObserver的类。在PreReceive上,我能够访问(ServiceBusReceiveContext)上下文并启动具有正确父id的遥测操作。看起来是这样的:

代码语言:javascript
运行
复制
    public Task PreReceive(ReceiveContext context)
    {
        var serviceBusContext = (ServiceBusReceiveContext)context;
        var requestActivity = new Activity("Process");
        requestActivity.SetParentId(serviceBusContext.Properties["Diagnostic-Id"].ToString());
        IOperationHolder<RequestTelemetry> operation = _telemetryClient.StartOperation<RequestTelemetry>(requestActivity);
        operation.Telemetry.Success = true;
        serviceBusContext.Properties.Add(TelemetryOperationKey, operation);

        return Task.CompletedTask;
    }

在PostReceive上,我可以停止操作:

代码语言:javascript
运行
复制
    public Task PostReceive(ReceiveContext context)
    {
        var serviceBusContext = (ServiceBusReceiveContext)context;
        var operation = (IOperationHolder<RequestTelemetry>)serviceBusContext.Properties[TelemetryOperationKey];
        operation.Dispose();

        return Task.CompletedTask;
    }

当异常发生时,我也会做一些神奇的事情:

代码语言:javascript
运行
复制
    public Task ReceiveFault(ReceiveContext context, Exception exception)
    {
        _telemetryClient.TrackException(exception);
        var serviceBusContext = (ServiceBusReceiveContext)context;
        var operation = (IOperationHolder<RequestTelemetry>)serviceBusContext.Properties[TelemetryOperationKey];
        operation.Telemetry.ResponseCode = "Fail";
        operation.Telemetry.Success = false;
        operation.Dispose();

        return Task.CompletedTask;
    }

通过阅读MassTransit文档很难找到这个解决方案。我想说的是,对于某些情况,MassTransit是一个非常棒的工具,没有其他选择。然而,文档非常糟糕。

票数 0
EN

Stack Overflow用户

发布于 2019-08-19 17:49:25

您可以在MassTransit中使用Application,有一个可以直接写入度量的包。

这些文件可在此查阅:

http://masstransit-project.com/MassTransit/usage/monitoring/applications-insights.html

而且,我认为,根据我使用Activity.Current的经验,您可以从任何地方访问DiagnosticSource。不过,这可能与AppInsights不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57561416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档