【发布时间】:2021-03-15 17:07:27
【问题描述】:
我成功地将 Apache Camel 的 OpenTracing 组件添加到我的应用程序中。我可以在 Jaeger UI 中看到痕迹。但是RabbitMQ 组件的跟踪仅显示交换名称,没有路由键作为操作名称。由于我的应用程序仅使用一个具有不同路由键的交换,因此我需要在跟踪中将路由键视为操作名称。
研究
使用OpenTracing Spring RabbitMQ,我可以公开另一个自定义RabbitMqSpanDecorator,参见Span decorator:
注意:您可以通过声明覆盖的
RabbitMqSpanDecoratorbean 来自定义跨度。
(但是,我根本无法使用RabbitMqSpanDecorator 更改操作名称,因为操作名称已硬编码为producer 或consumer。)
不幸的是,Apache Camel 使用自己不同的 RabbitmqSpanDecorator 实现来装饰跨度。我通过重写 Apache Camel 的 RabbitmqSpanDecorator 编写了一个自定义类,但我的自定义类没有被使用。
问题
如何使用 Apache Camel OpenTracing 组件为 Apache Camel RabbitMQ 组件更改跨度的操作名称?
【问题讨论】:
-
Camel 在Tracer 中使用Java 的service loader API 来实际加载各自的装饰。因此,如果您按照 JavaDocs 的
Deploying service providers on the class path部分中提到的方式打包您的装饰器,则应该选择您的自定义装饰器 -
@RomanVottner 谢谢。有用。你想写一个详细的答案吗?我会接受的。
标签: rabbitmq apache-camel jaeger opentracing