In MicroServices: Wenn Sie RESTClient verwenden, wie Sie URL dynamisch mit dem Anwendungsnamen aufrufen?Java

Java-Forum
Anonymous
 In MicroServices: Wenn Sie RESTClient verwenden, wie Sie URL dynamisch mit dem Anwendungsnamen aufrufen?

Post by Anonymous »

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post