@LoadBalanced RestTemplate should support direct IP address and localhost requests

Abierto
#1,601 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@xzxiaoshan ya está trabajando en esto.

Desde el 20/11/2025.

  • #1602 de @xzxiaoshan — abierto

Evaluación

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

Línea de trabajo

Comienza localizando el interceptor del balanceador de carga utilizado por @LoadBalanced RestTemplate y su ruta de resolución de service ID. Traza cómo se clasifican los hosts localhost, IPv4 y IPv6 entre corchetes; después, verifica que las llamadas directas omitan el descubrimiento, mientras que los nombres de servicio mantengan el balanceo de carga y los IDs host:port. Añade cobertura específica para las formas de URL indicadas y ejecuta las pruebas relevantes.

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

Descripción

waiting-for-triage

Describe the bug/feture
When using RestTemplate with @LoadBalanced annotation, it cannot make requests to direct addresses like IP addresses (http://192.168.1.110:8080) or localhost (http://localhost:8080). The load balancer interceptor attempts to resolve these through service discovery, causing request failures.

Expected Behavior
@LoadBalanced RestTemplate should intelligently distinguish between:

  • Direct requests - IP addresses and localhost calls that should bypass service discovery
  • Service discovery requests - Service names that should go through load balancing

Proposed Solution

Modify the load balancer detection logic to identify direct requests by these patterns:

  • localhost calls with explicit ports: http://localhost:8080
  • IP address calls with explicit ports: http://192.168.1.110:8080
  • IPv6 addresses with ports: http://[::1]:8080

Enhancement to Service ID Resolution

For service discovery compatibility:

Change service ID extraction from just host to host:port format
Schema (http/https) can be ignored in service ID resolution as it's not typically relevant for service discovery
This maintains backward compatibility while providing more precise service identification

Sample Code

@Autowired
private RestTemplate loadBalancedRestTemplate;

// Direct requests - should bypass service discovery
loadBalancedRestTemplate.getForObject("http://192.168.1.110:8080/api/test", String.class);
loadBalancedRestTemplate.getForObject("http://localhost:8080/api/test", String.class);
loadBalancedRestTemplate.getForObject("http://10.0.0.1:9000/service", String.class);
loadBalancedRestTemplate.getForObject("http://[::1]:8080/ipv6", String.class);

// Service discovery requests - should use load balancing
loadBalancedRestTemplate.getForObject("http://user-service/api/users", String.class);

Benefits

Single RestTemplate instance can handle both direct and service calls
Enhanced service ID resolution using host:port improves service discovery precision
Maintains full backward compatibility
Better developer experience without requiring multiple RestTemplate instances

Environment

Spring Cloud Commons version: [4.3.0]

Lenguaje dominante
Java
Estrellas
751
Forks
748
Merge medio
1 d 1 h
PR fusionados (30 d)
17

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de spring-cloud/spring-cloud-commons

Todos los issues de spring-cloud/spring-cloud-commons

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.