Ich arbeite an einer UserService -App, die Daten von Bewertungs- und Hoteldiensten mit Spring Boot abfasst. Ich möchte hartcodierte URLs durch Anwendungsnamen für die dynamische Service -Erkennung ersetzen.List ratingsOfUser = client.get().uri("http://localhost:8083/ratings/user/" + user.getUserId())
.retrieve()
.body(typeRef);
< /code>
gewünschtes Ansatz (mit Anwendungsname): < /p>
List ratingsOfUser = client.get().uri("http://RATING-SERVICE/ratings/user/" + user.getUserId())
.retrieve()
.body(typeRef);
< /code>
Versuchte Lösungen: < /p>
@loadBalanced Annotation mit RestClient: < /li>
< /ol>
@Configuration
public class MyConfig {
@Bean
@LoadBalanced
public RestClient restClient() {
return RestClient.builder()
.build();
}
}
< /code>
Das hat nicht funktioniert.@Bean
public WebClient.Builder loadBalancedWebClientBuilder() {
return WebClient.builder().filter(loadBalancerExchangeFilterFunction());
}
< /code>
Ich habe die Abhängigkeit von Spring-Cloud-Starter-Loadbalancer hinzugefügt, aber ich erhalte ein "Fehler mit dem Symbol 'Webclient'" ". < /p>
org.springframework.cloud
spring-cloud-starter-loadbalancer
4.0.4
< /code>
Spring -Startversion = 3.2.1 < /p>
MyConfig.class
@Configuration
public class MyConfig {
@Bean
@LoadBalanced
public RestClient restClient(){
return RestClient.builder()
.build();
}
@Bean
public WebClient.Builder loadBalancedWebClientBuilder() {
return WebClient.builder().filter(loadBalancerExchangeFilterFunction());
}
}
< /code>
GetUser -Methode < /p>
@Override
public User getUser(String userId) {
//get user from the db with the help of user Repo
User user = userRepository.findById(userId)
.orElseThrow(() -> new ResourceNotFoundException("User not found: " + userId));
// fetch Rating of the above user from Rating Service
ParameterizedTypeReference typeRef = new ParameterizedTypeReference() {};
// List ratingsOfUser = client.get().uri("http://RATING-SERVICE/ratings/user/" +user.getUserId())
List ratingsOfUser = client.get().uri("http://localhost:8083/ratings/user/" +user.getUserId())
.retrieve()
.body(typeRef);
// for each rating fetch Hotel
List ratingList = ratingsOfUser.stream().map(rating -> {
//api call to get hotel service
//Hotel hotels = client.get().uri("http://HOTEL-SERVICE/hotels/"+rating.getHotelId())
Hotel hotels = client.get().uri("http://localhost:8081/hotels/"+rating.getHotelId())
.retrieve()
.body(new ParameterizedTypeReference() {});
//set the hotel to the rating
rating.setHotel(hotels);
// return the rating
return rating;
}).collect(Collectors.toList());
user.setRatings(ratingList);
logger.info("{} ",ratingsOfUser);
return user;
}
< /code>
Bitte lassen Sie es mich wissen, wenn zusätzliche Informationen erforderlich sind. Danke
In MicroServices: Wenn Sie RESTClient verwenden, wie Sie URL dynamisch mit dem Anwendungsnamen aufrufen? ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Wie authentifiziert ich Benutzer über Microservices mit Identität und Rabbitmq?
by Anonymous » » in C# - 0 Replies
- 13 Views
-
Last post by Anonymous
-