apache / apache/servicecomb-java-chassis

spring-boot内嵌tomcat场景下,SpringMVC restcontroller接口内调用cse接口如何传递header(上下文)信息

Abierto
#4,632 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Java
Estrellas
1.9k
Forks
814
Merge medio
8 d 23 h
PR fusionados (30 d)
1

Descripción

## 场景
集成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");
}
}
}
```
image

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);
}
}

```
image

请问有什么方案?

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Empieza siguiendo el límite entre Spring MVC DispatchServlet y RestServlet; después inspecciona cómo RestTemplate gestiona la llamada cse://provider/test/health y cómo se rellena InvocationContext. Reproduce el flujo con el encabezado x-cse-context de curl contra actuator/health; estará hecho cuando el mismo contexto esté disponible en el handler de salud CSE descendente.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
java, spring-boot
Área
api, backend, distributed-systems
Tipo de issue
Nueva funcionalidad
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
30/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.