apache / apache/servicecomb-java-chassis
spring-boot内嵌tomcat场景下,SpringMVC restcontroller接口内调用cse接口如何传递header(上下文)信息
- Ngôn ngữ chính
- Java
- Star
- 1.9k
- Fork
- 814
- Merge trung bình
- 8 ngày 23 giờ
- Pull request đã merge (30 ngày)
- 1
Mô tả
## 场景
集成spring-boot-actuator组件,业务通过curl命令调用actuator/health接口检测服务状态,业务自定义AbstractHealthIndicator里面调用cse的health接口,代码如下:
```java
@Component
public class HealthChecker extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
RestTemplate restTemplate = RestTemplateBuilder.create();
String result = restTemplate.getForObject("cse://provider/test/health", String.class);
if ("UP".equals(result)) {
builder.up().withDetail("cseState", "UP");
} else {
builder.down().withDetail("cseState", "DOWN");
}
}
}
```
curl命令:携带x-cse-context header信息
```shell
curl -ki -H 'x-cse-context: {"x-biz-tenantId": "1002"}' http://localhost:9093/provider/actuator/health
```
## 期望
在provider/test/health 这个cse接口内可以通过handler在invocationcontext中获取到'x-cse-context: {"x-biz-tenantId": "1002"}' 信息。
## 现状
由于actuator组件的endpoint接口是由Spring MVC的DispatchServlet处理的,而cse接口是由RestServlet处理的,这个header信息无法带过来,但是是处于同一条调用链中。
其实,任何restcontroller接口调用cse接口都无法传递header信息, 我们希望在前台设置header上下文,调用rest接口的时候,将这个上下文传递到cse接口中
```java
@RestController("/")
public class HelloController {
@GetMapping("/hello")
public String hello(){
RestTemplate restTemplate = RestTemplateBuilder.create();
return restTemplate.getForObject("cse://provider/test/health", String.class);
}
}
```
请问有什么方案?
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu bằng cách lần theo ranh giới giữa Spring MVC DispatchServlet và RestServlet, sau đó kiểm tra cách RestTemplate xử lý lệnh gọi cse://provider/test/health và cách InvocationContext được điền. Tái hiện luồng bằng header x-cse-context của curl tới actuator/health; hoàn tất khi cùng một context khả dụng trong CSE health handler ở downstream.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java, spring-boot
- Lĩnh vực
- api, backend, distributed-systems
- Loại issue
- Tính năng
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 30/100