最近,我开始使用Spring cloud sleuth来跟踪应用程序中的请求,我编写了示例项目来测试这个功能,但是当应用程序运行时,日志显示每个新的超文本传输协议请求都有不同的跟踪ID。
下面是代码:Config.java
package com.cloud;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@ComponentScan()
@EnableAutoConfiguration()
@EnableWebMvc
public class Config {
}
控制器.java
package com.cloud;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.Span;
import org.springframework.cloud.sleuth.SpanAccessor;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class Controller {
@Autowired
SpanAccessor spanAccessor;
@Autowired
RestTemplate restTemplate;
int port = 8080;
private static final Logger LOGGER = LoggerFactory.getLogger(Controller.class);
@RequestMapping("/")
public String hi() throws InterruptedException {
LOGGER.debug("you called hi");
debug();
String s = this.restTemplate
.getForObject("http://localhost:" + this.port + "/cloud/hi2", String.class);
return "hi/" + s;
}
@RequestMapping("/hi2")
public String hi2() throws InterruptedException {
LOGGER.debug("you called hi2");
debug();
return "welcome";
}
public void debug(){
Span span = spanAccessor.getCurrentSpan();
LOGGER.info("span id is "+span.getSpanId()+" and trace id is "+span.getTraceId());
}
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
这里是日志:
you called hi: span id is 6716502497271349964 and trace id is 6716502497271349964
you called hi2: span id is -4542377791493777157 and trace id is -4542377791493777157
我复制/粘贴了您的代码,它可以正常工作,但我应该提到一些不同之处:
首先也是最重要的,我运行它与一个主要的女巫当然有和springboot anotation:
"com.cloud"
其次,我删除了你的配置类,因为它什么都不做。
第三,mi Spring版本为1.5.1。RELEASE和Spring Cloud版本为Dalston。BUILD-SNAPSHOT
以下是日志:
2017-03-07 10:48:29.716信息[traceId,2488a4c8d3f7238a,2488a4c8d3f7238a,false]4179---[nio-8080-exec-1]com.cloud。控制器:span id为2632535164654658442,trace id为2632535164654658442 2017-03-07 10:48:45.162 INFO[traceId,2488a4c8d3f7238a,f5e47645b30fd85,false]4179---[nio-8080-exec-2]com.cloud。控制器:范围id为-728327186587517563,跟踪id为2632535164654658442
问题内容: 每个HTTP请求是否在不同的线程中访问相同的servlet对象?还是创建一个新的线程和新的Servlet实例? 问题答案: 如果您的servlet未实现,则容器将使用相同的servlet实例。否则,不能保证击中相同的物体。如果认为必要,容器可以自由创建更多的servlet实例。但是请求来自不同的线程,不一定是新创建的(如Sanjay所述)。 根据Servlet 3.0规范: 对于未在分
问题内容: 我遇到的情况是可以从多个不同的域访问应用程序。例如, foo.com 和 bar.com 在理论上都可以指向我的应用程序。此外,它们的子域也可以指向我的应用程序,例如 red.foo.com 和 blue.foo.com 。我正在使用Express cookie会话,该会话的初始化代码如下所示: 当用户访问 foo.com 或其任何子域时,这种方法效果很好,但是 bar.com 无法正
问题内容: 按下提交按钮后,通过和在我的angular函数中提交了一个文件数组(,可以少到一个文件,用户可以多得多): 问题在于,每个文件的初始for循环的增量以及事件侦听器触发时的增量已经超过了所需的预期值,仅影响数组中的最后一个。我用作向用户交互显示每个文件进度的一种方法,因此我需要为中的每个数组元素具有单独的事件侦听器。如何在Angular中为单个数组元素分配和跟踪事件? 更新 我对两个事件
将自动为所有HTTP请求启用跟踪。 您可以查看httptrace端点并获取有关最近100次请求 - 响应交换的基本信息。 5.8.1 自定义HTTP跟踪 要自定义每个跟踪中包含的项,请使用management.trace.http.include配置属性。 对于高级自定义,请考虑注册自己的HttpExchangeTracer实现。 默认情况下,使用存储最后100个请求 - 响应交换的跟踪的InMe
我试图在Flutter应用程序中使用AWS DynamoDB,由于缺乏官方的AWS Dart SDK,我被迫使用低级别的HTTP REST API。 签署AWS HTTP请求的方法非常繁琐,但使用AWS提供的示例作为指导,我能够相对轻松地将Python转换为Dart。最终结果是两组代码产生相同的身份验证签名。 当我真的去发送请求时,我的问题来了。Python的工作原理与预期一致,但使用Dart的H
我不明白在spring mvc中使用dispatcher servlet只创建了一个bean对象,还是每个请求都创建了一个新对象? 控制器代码:- 在代码中,我在LoginBean对象中设置数据,并在方法abc中的modelandview对象中设置它。 然后,在jsp中,我没有为usename输入任何值,在这种情况下,当我提交表单并调用处理程序方法(initform)时,我试图打印相同的lb.ge