Updated documentation
This commit is contained in:
@@ -417,6 +417,18 @@ dependencies {
|
|||||||
<2> Add the dependency to `spring-cloud-starter-zipkin`. That way, all nested dependencies get downloaded.
|
<2> Add the dependency to `spring-cloud-starter-zipkin`. That way, all nested dependencies get downloaded.
|
||||||
<3> To automatically configure RabbitMQ, add the `spring-rabbit` dependency.
|
<3> To automatically configure RabbitMQ, add the `spring-rabbit` dependency.
|
||||||
|
|
||||||
|
=== Overriding the auto-configuration of Zipkin
|
||||||
|
|
||||||
|
Spring Cloud Sleuth supports sending traces to multiple tracing systems as of version 2.1.0.
|
||||||
|
In order to get this to work, every tracing system needs to have a `Reporter<Span>` and `Sender`.
|
||||||
|
If you want to override the provided beans you need to give them a specific name.
|
||||||
|
To do this you can use respectively `ZipkinAutoConfiguration.REPORTER_BEAN_NAME` and `ZipkinAutoConfiguration.SENDER_BEAN_NAME`.
|
||||||
|
|
||||||
|
[source,java]
|
||||||
|
----
|
||||||
|
include::../../../../spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin2/ZipkinAutoConfigurationTests.java[tags=override_default_beans,indent=0]
|
||||||
|
----
|
||||||
|
|
||||||
== Additional Resources
|
== Additional Resources
|
||||||
|
|
||||||
You can watch a video of https://twitter.com/reshmi9k[Reshmi Krishna] and https://twitter.com/mgrzejszczak[Marcin Grzejszczak] talking about Spring Cloud
|
You can watch a video of https://twitter.com/reshmi9k[Reshmi Krishna] and https://twitter.com/mgrzejszczak[Marcin Grzejszczak] talking about Spring Cloud
|
||||||
|
|||||||
@@ -203,12 +203,12 @@ public class ZipkinAutoConfigurationTests {
|
|||||||
this.context.refresh();
|
this.context.refresh();
|
||||||
|
|
||||||
then(this.context.getBeansOfType(Sender.class)).hasSize(2);
|
then(this.context.getBeansOfType(Sender.class)).hasSize(2);
|
||||||
then(this.context.getBeansOfType(Sender.class)).containsKeys("zipkinSender",
|
then(this.context.getBeansOfType(Sender.class))
|
||||||
"otherSender");
|
.containsKeys(ZipkinAutoConfiguration.SENDER_BEAN_NAME, "otherSender");
|
||||||
|
|
||||||
then(this.context.getBeansOfType(Reporter.class)).hasSize(2);
|
then(this.context.getBeansOfType(Reporter.class)).hasSize(2);
|
||||||
then(this.context.getBeansOfType(Reporter.class)).containsKeys("zipkinReporter",
|
then(this.context.getBeansOfType(Reporter.class)).containsKeys(
|
||||||
"otherReporter");
|
ZipkinAutoConfiguration.REPORTER_BEAN_NAME, "otherReporter");
|
||||||
|
|
||||||
Span span = this.context.getBean(Tracing.class).tracer().nextSpan().name("foo")
|
Span span = this.context.getBean(Tracing.class).tracer().nextSpan().name("foo")
|
||||||
.tag("foo", "bar").start();
|
.tag("foo", "bar").start();
|
||||||
@@ -226,6 +226,34 @@ public class ZipkinAutoConfigurationTests {
|
|||||||
Awaitility.await().untilAsserted(() -> then(sender.isSpanSent()).isTrue());
|
Awaitility.await().untilAsserted(() -> then(sender.isSpanSent()).isTrue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldOverrideDefaultBeans() {
|
||||||
|
this.context = new AnnotationConfigApplicationContext();
|
||||||
|
this.context.register(ZipkinAutoConfiguration.class,
|
||||||
|
PropertyPlaceholderAutoConfiguration.class, TraceAutoConfiguration.class,
|
||||||
|
Config.class, MyConfig.class);
|
||||||
|
this.context.refresh();
|
||||||
|
|
||||||
|
then(this.context.getBeansOfType(Sender.class)).hasSize(1);
|
||||||
|
then(this.context.getBeansOfType(Sender.class))
|
||||||
|
.containsKeys(ZipkinAutoConfiguration.SENDER_BEAN_NAME);
|
||||||
|
|
||||||
|
then(this.context.getBeansOfType(Reporter.class)).hasSize(1);
|
||||||
|
then(this.context.getBeansOfType(Reporter.class))
|
||||||
|
.containsKeys(ZipkinAutoConfiguration.REPORTER_BEAN_NAME);
|
||||||
|
|
||||||
|
Span span = this.context.getBean(Tracing.class).tracer().nextSpan().name("foo")
|
||||||
|
.tag("foo", "bar").start();
|
||||||
|
|
||||||
|
span.finish();
|
||||||
|
|
||||||
|
Awaitility.await()
|
||||||
|
.untilAsserted(() -> then(this.server.getRequestCount()).isEqualTo(0));
|
||||||
|
|
||||||
|
MyConfig.MySender sender = this.context.getBean(MyConfig.MySender.class);
|
||||||
|
Awaitility.await().untilAsserted(() -> then(sender.isSpanSent()).isTrue());
|
||||||
|
}
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
protected static class Config {
|
protected static class Config {
|
||||||
|
|
||||||
@@ -309,4 +337,54 @@ public class ZipkinAutoConfigurationTests {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// tag::override_default_beans[]
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
protected static class MyConfig {
|
||||||
|
|
||||||
|
@Bean(ZipkinAutoConfiguration.REPORTER_BEAN_NAME)
|
||||||
|
Reporter<zipkin2.Span> myReporter() {
|
||||||
|
return AsyncReporter.create(mySender());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(ZipkinAutoConfiguration.SENDER_BEAN_NAME)
|
||||||
|
MySender mySender() {
|
||||||
|
return new MySender();
|
||||||
|
}
|
||||||
|
|
||||||
|
static class MySender extends Sender {
|
||||||
|
|
||||||
|
private boolean spanSent = false;
|
||||||
|
|
||||||
|
boolean isSpanSent() {
|
||||||
|
return this.spanSent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Encoding encoding() {
|
||||||
|
return Encoding.JSON;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int messageMaxBytes() {
|
||||||
|
return Integer.MAX_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int messageSizeInBytes(List<byte[]> encodedSpans) {
|
||||||
|
return encoding().listSizeInBytes(encodedSpans);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Call<Void> sendSpans(List<byte[]> encodedSpans) {
|
||||||
|
this.spanSent = true;
|
||||||
|
return Call.create(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// end::override_default_beans[]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user