我成功地将Apache Camel的OpenTracing组件添加到了我的应用程序中。我可以在Jaeger UI中看到跟踪。但是RabbitMQ组件的跟踪只显示了交换名称,而没有将路由关键字作为操作名称。因为我的应用程序只使用了一个具有不同路由关键字的交换,所以我需要在跟踪中将路由关键字作为操作名称。
研究
使用OpenTracing Spring RabbitMQ,我可以公开另一个定制的RabbitMqSpanDecorator
,请参见Span装饰器:
注意:您可以通过声明一个被覆盖的RabbitMqSpanDecorator
bean来自定义跨度。
(但是,我根本无法使用RabbitMqSpanDecorator
更改操作名,因为操作名已硬编码为producer
或consumer
。)
不幸的是,Apache Camel使用它自己的RabbitmqSpanDecorator
实现来修饰span。我通过覆盖Apache Camel的RabbitmqSpanDecorator
编写了一个自定义类,但我的自定义类没有被使用。
问题
如何更改Apache Camel RabbitMQ组件的具有Apache Camel OpenTracing组件的span的操作名称?
1条答案
按热度按时间envsm3lx1#
可以使用
ServiceLoader
更改Tracer
实现,请参见OpenTracing:明确
在POM中包含
camel-opentracing
组件,沿着与所选的OpenTracing兼容跟踪器关联的任何特定依赖项。要显式配置OpenTracing支持,请示例化
OpenTracingTracer
并初始化camel上下文。可以选择指定Tracer
,也可以使用Registry
或ServiceLoader
隐式搜索Tracer
。对于
DefaultTracer
,还可以将RabbitmqSpanDecorator
更改为ServiceLoader
,请参见Tracer.java
:因此,我必须添加一个文件
org.apache.camel.tracing.SpanDecorator
,其中包含我的自定义RabbitmqSpanDecorator
的名称,请参见ServiceLoader
:在类路径上部署服务提供程序
打包为类路径的JAR文件的服务提供程序通过将提供程序配置文件放在资源目录META-INF/services中来标识。提供程序配置文件的名称是服务的完全限定二进制名称。提供程序配置文件包含服务提供程序的完全限定二进制名称的列表,每行一个。
我的自定义
RabbitmqSpanDecorator
: