下面列出了怎么用io.opentracing.propagation.BinaryInject的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Injects the underlying context using B3 encoding by default.
*/
@Override public <C> void inject(SpanContext spanContext, Format<C> format, C carrier) {
BraveSpanContext braveContext = ((BraveSpanContext) spanContext);
if (carrier instanceof BinaryInject) {
BinaryCodec.INSTANCE.inject(braveContext.unwrap(), (BinaryInject) carrier);
return;
}
if (!(carrier instanceof TextMapInject)) {
throw new UnsupportedOperationException(carrier + " not instanceof TextMapInject");
}
Kind kind = braveContext.kind;
Injector<TextMapInject> injector = null;
if (Kind.CLIENT.equals(kind)) {
injector = formatToClientInjector.get(format);
} else if (Kind.PRODUCER.equals(kind)) {
injector = formatToProducerInjector.get(format);
} else if (Kind.CONSUMER.equals(kind)) {
injector = formatToConsumerInjector.get(format);
}
if (injector == null) injector = formatToInjector.get(format);
if (injector == null) {
throw new UnsupportedOperationException(format + " not in " + formatToInjector.keySet());
}
injector.inject(braveContext.unwrap(), (TextMapInject) carrier);
}
@Test
public void testBinaryPropagator() {
MockTracer tracer = new MockTracer(MockTracer.Propagator.BINARY);
{
Span parentSpan = tracer.buildSpan("foo")
.start();
parentSpan.setBaggageItem("foobag", "fooitem");
parentSpan.finish();
ByteBuffer buffer = ByteBuffer.allocate(128);
BinaryInject binary = BinaryAdapters.injectionCarrier(buffer);
tracer.inject(parentSpan.context(), Format.Builtin.BINARY_INJECT, binary);
buffer.rewind();
SpanContext extract = tracer.extract(Format.Builtin.BINARY_EXTRACT, BinaryAdapters.extractionCarrier(buffer));
Span childSpan = tracer.buildSpan("bar")
.asChildOf(extract)
.start();
childSpan.setBaggageItem("barbag", "baritem");
childSpan.finish();
}
List<MockSpan> finishedSpans = tracer.finishedSpans();
Assert.assertEquals(2, finishedSpans.size());
Assert.assertEquals(finishedSpans.get(0).context().traceId(), finishedSpans.get(1).context().traceId());
Assert.assertEquals(finishedSpans.get(0).context().spanId(), finishedSpans.get(1).parentId());
Assert.assertEquals("fooitem", finishedSpans.get(0).getBaggageItem("foobag"));
Assert.assertNull(finishedSpans.get(0).getBaggageItem("barbag"));
Assert.assertEquals("fooitem", finishedSpans.get(1).getBaggageItem("foobag"));
Assert.assertEquals("baritem", finishedSpans.get(1).getBaggageItem("barbag"));
}
@Override public void inject(TraceContext traceContext, BinaryInject binaryInject) {
byte[] injected = B3SingleFormat.writeB3SingleFormatAsBytes(traceContext);
binaryInject.injectionBuffer(injected.length).put(injected);
}