入门
建筑
专用服务平台
NServiceBus服务总线
运输
坚持不懈
服务洞察力
服务脉冲
服务控制
监测
样品

自定义OpenTelemetry跟踪

NuGet套餐: NServiceBus服务总线(9.x)

此示例显示如何以不同的方式扩展OpenTelemetry活动。

运行项目

该代码由一个向自身发送消息的单端点项目组成。

压机发送创建订单带有随机的消息订单Id。处理消息时,会再创建两条消息:帐单订单发货订单.

在发送和处理消息时,跟踪数据被导出到控制台。一些跟踪数据来自NServiceBus,一些来自示例中的自定义代码。

代码演练

全局配置

默认情况下未启用NServiceBus OpenTelemetry检测。必须在端点配置上启用它。

var endpointConfiguration=新endpointConfiguration(“CustomTelemetry”);端点配置。启用OpenTelemetry();

OpenTelemetry配置为将所有跟踪导出到命令行。它包括NServiceBus。核心源,它内置于NServiceBus和示例中定义的自定义活动源中(参见下文)。

var resourceBuilder=资源生成器。创建默认值().AddService(“自定义遥测”);var tracerProviderBuilder=Sdk。CreateTracerProviderBuilder().SetResourceBuilder(resourceBuilder).AddSource(“NServiceBus.Core”).AddSource(CustomActivitySources.Name).AddProcessor(新的NetHostProcessor).AddConsoleExporter();

注册了一个自定义处理器,它将机器名作为标记添加到此跟踪侦听器创建的每个活动。

类NetHostProcessor:BaseProcessor<活动>{字符串主机名;公用NetHostProcessor(){主机名=Dns。获取主机名();}公共重写void OnStart(活动数据){数据。SetTag(“net.host.name”,主机名);}}

自定义活动

该示例包含自定义活动源。

静态类CustomActivitySources{public const string Name=“Sample.ActivitySource”;public static ActivitySource Main=新ActivityResource(名称);}

的处理程序创建订单包括围绕帐单部分的自定义活动。

公共异步任务句柄(CreateOrder消息,IMessageHandlerContext上下文){使用(var activity=CustomActivitySources.Main.StartActivity(“账单订单”)){慰问。WriteLine($“帐单订单{message.OrderId}”);活动?。AddTag(“sample.billing.system”,“paypal”);//计算订单成本等待上下文。SendLocal(新BillOrder{OrderId=message.OrderId});}慰问。WriteLine($“发货订单{message.OrderId}”);等待上下文。SendLocal(新发货订单{OrderId=message.OrderId});}

这将自动创建为NServiceBus创建的调用处理程序活动的子活动。NServiceBus发送消息活动将此自定义活动视为其父活动。

发送CreateOrder处理CreateOrder调用CreateOrderHandler帐单订单<--自定义活动发送BillOrder发送发货订单

添加标签

的处理程序发货订单将标记添加到环境行为中。

类ShipOrderHandler:IHandleMessages<ShipOrder>{公共任务句柄(ShipOrder消息,IMessageHandlerContext上下文){慰问。WriteLine($“订单已发货{message.OrderId}”);//弄清楚我们要运送到哪个州活动。当前?。AddTag(“sample.shipping.state”,“state”);return任务。已完成任务;}}

在示例中,这些标记将添加到NServiceBus调用处理程序活动中。

发送发货订单处理发货订单调用ShipOrderHandler<--此处添加自定义标记

传出管道中的行为将消息的大小添加为所有传出消息活动的标记。

类TraceOutgoingMessageSizeBehavior:行为{公共重写任务调用(IOutgoingPhysicalMessageContext上下文,趣味<任务>下一步){活动。当前?。AddTag(“sample.message.body.size”,context.body.Length);return next();}}

相关文章