383.10. 例
camel-zipkin を有効にするには、最初に設定する必要があります
ZipkinTracer zipkin = new ZipkinTracer(); // Configure a reporter, which controls how often spans are sent // (the dependency is io.zipkin.reporter2:zipkin-sender-okhttp3) sender = OkHttpSender.create("http://127.0.0.1:9411/api/v2/spans"); zipkin.setSpanReporter(AsyncReporter.create(sender)); // and then add zipkin to the CamelContext zipkin.init(camelContext);
上記の設定は、Camel ルートのすべての入力メッセージと出力メッセージをトレースします。
XML で ZipkinTracer を使用するには、スクライブと zipkin トレーサー Bean を定義するだけです。Camel はそれらを自動的に検出して使用します。
<!-- configure how to reporter spans to a Zipkin collector (the dependency is io.zipkin.reporter2:zipkin-reporter-spring-beans) --> <bean id="http" class="zipkin2.reporter.beans.AsyncReporterFactoryBean"> <property name="sender"> <bean id="sender" class="zipkin2.reporter.beans.OkHttpSenderFactoryBean"> <property name="endpoint" value="http://localhost:9411/api/v2/spans"/> </bean> </property> <!-- wait up to half a second for any in-flight spans on close --> <property name="closeTimeout" value="500"/> </bean> <!-- setup zipkin tracer --> <bean id="zipkinTracer" class="org.apache.camel.zipkin.ZipkinTracer"> <property name="serviceName" value="dude"/> <property name="spanReporter" ref="http"/> </bean>
383.10.1. ServiceName
ただし、Camel エンドポイントをわかりやすい論理名にマップする場合は、マッピングを追加できます。
- ServiceName *
次のように、すべてのイベントがフォールバックして使用するグローバルサービス名を設定できます。
zipkin.setServiceName("invoices");
これにより、すべての入力および出力 zipkin トレースに同じサービス名が使用されます。アプリケーションが異なるサービスを使用する場合は、それらをよりきめ細かいクライアント/サーバーサービスマッピングにマッピングする必要があります。
383.10.2. クライアントサービスとサーバーサービスのマッピング
- ClientServiceMappings
- ServerServiceMappings
アプリケーションが他の人が呼び出すことができるサービスをホストしている場合、Camel ルートエンドポイントをサーバーサービスマッピングにマッピングできます。たとえば、Camel アプリケーションに次のルートがあるとします。
from("activemq:queue:inbox") .to("http:someserver/somepath");
これをサーバーサービスとして作成するには、次のマッピングを追加します。
zipkin.addServerServiceMapping("activemq:queue:inbox", "orders");
次に、メッセージがその受信トレイキューから消費されると、サービス名が orders の zipkin サーバーイベントになります。
ここで、http:someserver/somepath への呼び出しもサービスであり、クライアントサービス名にマップするとします。これは次のように実行できます。
zipkin.addClientServiceMapping("http:someserver/somepath", "audit");
次に、同じ Camel アプリケーションで、入力エンドポイントと出力エンドポイントを異なる zipkin サービス名にマップしました。
サービスマッピングではワイルドカードを使用できます。すべての出力呼び出しを同じ HTTP サーバーに一致させるには、次のようにします。
zipkin.addClientServiceMapping("http:someserver*", "audit");