我正在使用Zipkin和Spring Sleuth来显示痕迹。当我在本地使用时,http://localhost:9411/zipkin/dependency/显示生态系统内创建的良好依赖关系图。有时,来自生态系统外部的后端会被调用,而这些后端不会显示在该图表中。有没有可能对这样一个外部系统的调用(假设RestTemplate和假客户机)进行注释,以便Zipkin能够实际绘制该依赖关系?如果可能的话,我该怎么办?
这将是我的代码基线:
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
@RequestMapping("/")
public String callExternalBackend() {
return restTemplate.getForObject("https://httpbin.org/get", String.class);
}
我想在某个地方键入http
,以便在Zipkin的依赖关系图中绘制此调用。
非常感谢。
//基于当前解决方案进行编辑我正在使用Spring Cloud Finchley,并在restTemplate调用之前添加了以下行:
@RequestMapping("/")
public String callBackend() {
spanCustomizer.tag("peer.service", "httpbin");
return restTemplate.getForObject("https://httpbin.org/get", String.class);
}
我只是在这个类中注入spanCustomzer
。Span被发送到Zipkin,我看到标签已经设置:
不幸的是,它没有在依赖项视图中绘制。还有什么我需要配置的吗,也许在Zipkin而不是Sleuth中?
EDGWARE
你看过文件了吗?如果您在Edgware版本中使用Spring Cloud Sleuth,如果您阅读Sleuth部分,您会发现这篇文档https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_custom_sa_tag_in_zipkin
让我给你复印一下
54.5 Zipkin中的自定义SA标记有时您希望创建一个手动范围,将对未检测的外部服务的调用封装起来。你能做的就是与同伴建立一个跨度。服务标签,它将包含您要调用的服务的值。下面你可以看到一个调用Redis的例子,它被包装在这样一个跨度中。
org.springframework.cloud.sleuth.Span newSpan = tracer.createSpan("redis");
try {
newSpan.tag("redis.op", "get");
newSpan.tag("lc", "redis");
newSpan.logEvent(org.springframework.cloud.sleuth.Span.CLIENT_SEND);
// call redis service e.g
// return (SomeObj) redisTemplate.opsForHash().get("MYHASH", someObjKey);
} finally {
newSpan.tag("peer.service", "redisService");
newSpan.tag("peer.ipv4", "1.2.3.4");
newSpan.tag("peer.port", "1234");
newSpan.logEvent(org.springframework.cloud.sleuth.Span.CLIENT_RECV);
tracer.close(newSpan);
}
[重要]重要记住不要同时添加两个对等项。服务标签和SA标签!只需添加对等项。服务
芬奇利
SA
标签对Finchley不起作用。您必须使用span上的remoteEndpoint
以以下方式执行此操作。
Span span = tracer.newTrace().name("redis");
span.remoteEndpoint(Endpoint.newBuilder().serviceName("redis").build());
span.kind(CLIENT);
try(SpanInScope ws = tracer.withSpanInScope(span.start())) {
// add any tags / annotations on the span
// return (SomeObj) redisTemplate.opsForHash().get("MYHASH", someObjKey);
} finally {
span.finish();
}
通常, 一个 Java 项目的依赖许多外部的 JAR 文件.为了在项目里引用这些 JAR 文件,你需要告诉 Gradle 去哪里找它们.在 Gradle 中,JAR 文件位于一个仓库中,这里的仓库类似于 MAVEN 的仓库,可以被用来提取依赖,或者放入依赖。 举个例子,我们将使用开放的 Maven 仓库: 例子 7.3. 加入 Maven 仓库 build.gradle repositories
我试图用JUnit和SLF4J测试来测试记录器的行为,这是“SLF4J的一个测试实现,它将日志消息存储在内存中,并提供检索它们的方法”。 我有一些将SLF4J作为传递依赖项的依赖项。我试图将SLF4J从我的测试配置中的所有依赖项中排除,但我仍然需要它来进行SLF4J测试。 我可以通过下面的代码将SLF4J排除在所有内容之外,但这显然也将它排除在我需要的SLF4J测试之外。 由于SLF4J是我的许多
我有一个图书馆项目。我想使用Android的新构建系统。目前我遇到了一个相当烦人的情况。 我在上定义了依赖项,但它们从未出现在Android Studio的外部库中。因此,对这些库的所有引用都被标记为错误。 更新 这个问题似乎在最新的Android Studio版本(0.2.5)上得到了修复
我需要在我的maven项目中添加大约15个罐子,它在远程和中央存储库中都不可用。 然而,我实现了以下目标:, > 在我的项目路径中添加了jars(\src\lib) 将pom更改如下, 我的问题是: 我是否需要像上面那样分别对所有15个JAR重复它,或者我们有任何其他方法来绑定这些JAR并将其作为一个依赖路径? Maven在这里讨论了同样的事情:指向多个JAR的系统依赖性。但我想知道我是否能得到更
问题内容: 关于添加库和依赖项有很多信息,但是我还没有找到关于能够实际编辑库的任何有用信息。 我在项目中添加了https://github.com/jdamcd/android- crop 作为依赖项,但我想编辑其某些功能,主要是与布局相关的内容。但是,当我浏览文件时,Android Studio会说“生成了构建文件夹下的文件,不应对其进行编辑”,当我对其进行编辑时,一旦系统构建,它们将返回到其预
我尝试过在IntelliJ的project structure下通过库添加JAR,并只在根目录下的libs文件夹中添加JAR。首先,我提供了绝对路径,但后来我将其更改为${basedir},因为绝对路径没有映射为docker容器上的卷。有什么方法可以将外部jar与项目jar打包,以便在docker容器中使用它?