У меня есть простое приложение на основе микросервисов. Он имеет 3 микросервиса. Кино-каталог-сервис, рейтинги-дата-сервис, фильм-инфо-сервис. Северная служба в кинотеатрах зависит от рейтингов-дата-сервис и фильма-инфу-сервиса. У меня есть getUserrative () внутри класса UserratingInfo Servcie, который защищен пробезом. Когда я намеренно не запустил рейтинги-дата-сервис и хит /каталог /10 я вижу: < /p>
java.lang.IllegalStateException: No instances available for ratings-data-service вместо выполняемого метода резерва.package com.example.discoveryserver2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryServer2Application {
public static void main(String[] args) {
SpringApplication.run(DiscoveryServer2Application.class, args);
}
}
< /code>
package com.example.moviecatalogservice2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class MovieCatalogService2Application {
public static void main(String[] args) {
SpringApplication.run(MovieCatalogService2Application.class, args);
}
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
< /code>
package com.example.movieinfoservice2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class MovieInfoService2Application {
public static void main(String[] args) {
SpringApplication.run(MovieInfoService2Application.class, args);
}
@Bean
public RestTemplate getRestTemplate() {
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();
clientHttpRequestFactory.setConnectTimeout(3000);
return new RestTemplate();
}
}
< /code>
package com.example.ratingsdataservice2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RatingsDataService2Application {
public static void main(String[] args) {
SpringApplication.run(RatingsDataService2Application.class, args);
}
}
< /code>
package com.example.moviecatalogservice2.resources;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.moviecatalogservice2.models.CatalogItem;
import com.example.moviecatalogservice2.models.UserRating;
import com.example.moviecatalogservice2.services.MovieInfo;
import com.example.moviecatalogservice2.services.UserRatingInfo;
@RestController
@RequestMapping("/catalog")
public class CatalogResource {
@Autowired
private MovieInfo movieInfo;
@Autowired
private UserRatingInfo userRatingInfo;
@RequestMapping("/{userId}")
public List getCatalog(@PathVariable("userId") String userId) {
UserRating userRating = userRatingInfo.getUserRating(userId);
return userRating.getRatings().stream()
.map(rating -> {
return movieInfo.getCatalogItem(rating);
})
.collect(Collectors.toList());
}
}
< /code>
package com.example.moviecatalogservice2.services;
import java.util.Arrays;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import com.example.moviecatalogservice2.models.Rating;
import com.example.moviecatalogservice2.models.UserRating;
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
@Service
public class UserRatingInfo {
@Autowired
private RestTemplate restTemplate;
@CircuitBreaker(name = "ratings-data-service-cb", fallbackMethod = "getFallbackUserRating")
public UserRating getUserRating(String userId) {
UserRating userRating = restTemplate.getForObject("http://ratings-data-service/ratingsdata/user/{userId}", UserRating.class, userId);
return userRating;
}
public UserRating getFallbackUserRating(String userId, Exception exc) {
UserRating userRating = new UserRating();
userRating.setUserId(userId);
userRating.setRatings(Arrays.asList(new Rating("100", 0)));
return userRating;
}
}
< /code>
pom.xml файл: < /pbr />
4.0.0
org.springframework.boot
spring-boot-starter-parent
3.4.4
Подробнее здесь: https://stackoverflow.com/questions/795 ... silience4j
Метод отступления в приложении Spring Boot не вызывается при использовании Resilience4J ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Несколько конфигураций повторных попыток для Resilience4J в Spring Boot?
Anonymous » » в форуме JAVA - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-