@LoadBalanced RestTemplate should support direct IP address and localhost requests
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
Direzione di ricerca
Inizia individuando l’interceptor del bilanciatore del carico utilizzato da @LoadBalanced RestTemplate e il relativo percorso di risoluzione del service ID. Traccia il modo in cui vengono classificati gli host localhost, IPv4 e IPv6 tra parentesi quadre, quindi verifica che le chiamate dirette bypassino la discovery, mentre i nomi dei servizi mantengano il bilanciamento del carico e gli ID host:port. Aggiungi una copertura mirata per le forme di URL elencate ed esegui i test pertinenti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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]
- Lingua principale
- Java
- Stelle
- 751
- Fork
- 748
- Merge medio
- 1g 1h
- PR unite (30g)
- 17
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di spring-cloud/spring-cloud-commons
-
waiting-for-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
spring-cloud/spring-cloud-commons#1708 ·
I maintainer di solito rispondono entro 1 giorno
-
waiting-for-triage
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
spring-cloud/spring-cloud-commons#1543 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement for team discussion
Difficoltà 5/5 Più di una settimana Idoneità per principianti 42/100
spring-cloud/spring-cloud-commons#1676 ·
I maintainer di solito rispondono entro 1 giorno
-
waiting-for-triage
Difficoltà 5/5 Più di una settimana Idoneità per principianti 38/100
spring-cloud/spring-cloud-commons#1675 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
waiting-for-triage
Difficoltà 4/5 3-5 giorni Idoneità per principianti 42/100
spring-cloud/spring-cloud-commons#1640 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di spring-cloud/spring-cloud-commons
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
NationalSecurityAgency/ghidra#10149 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 90/100
yegor256/antlr2ebnf-maven-plugin#155 ·
I maintainer di solito rispondono entro 1 giorno
-
account bug exercise lecture programming user interface
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
ls1intum/Artemis#14512 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
kind:bug priority:major
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
swiftlang/swift-java#955 ·
I maintainer di solito rispondono entro 1 giorno