Метод отступления в приложении Spring Boot не вызывается при использовании Resilience4JJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Метод отступления в приложении Spring Boot не вызывается при использовании Resilience4J

Сообщение Anonymous »

У меня есть простое приложение на основе микросервисов. Он имеет 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»