Spring Cloud Kubernetes Ошибка FeignClient
Я использую весенние облачные kubernetes с весенней загрузкой и необходимыми требованиями RBAC, необходимыми для проекта.
<!-- kubernetes -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-ribbon</artifactId>
</dependency>
У меня в микрорайоне работает 2 микросервиса
my-service
some-service
my-service
работает с пружинной загрузкой 2.x и some-service
работает с Spring boot 1.x. Обе услуги выставляются через Kubernetes Service
и с правильными конечными точками.
выдержка из application.yaml
за my-service
как ниже.
some-service:
url: http://some-service:8080
serviceName: some-service
И FeignClient используется, как показано ниже.
//FeignClient(url = "${some-service.url}") // does not work either
@FeignClient(value = "${some-service.serviceName}")
@RequestMapping("/api")
public interface SomeServiceClient {
Также я сделал spring.cloud.kubernetes.discovery.enabled=false
С этим на месте, я ожидаю, что my-service
должен быть в состоянии поговорить с some-service
через обнаружение сервиса kubernetes но я получаю эту ошибку.
ERROR c.b.d.m.s.c.MatchCoordinator - error=FeignException: status 404 reading SomeServiceClient#get(Test
ion,Output) stacktrace=feign.FeignException: status 404 reading SomeServiceClient#get
Я не могу понять, что я делаю не так. Также у меня нет Spring.application.name для some-service
так как это сторонний сервис.
Может кто-нибудь, пожалуйста, помогите. Кроме того, к сведению, что службы работают должным образом с переадресацией портов и при доступе через Ingress.
2 ответа
Ну, я обнаружил, что расхождение было на some-service
где полезная нагрузка была обновлена и my-service
FeignClient не обновлялся. и, следовательно, вызвало ошибку HTTP 404. Однако теперь он работает с FeignClient
правильно и в состоянии сделать обнаружение службы с именем службы должным образом.
Если у вас не установлено имя для какого-либо сервиса, а это сервис стороннего производителя, я думаю, что лучшим подходом было бы вызвать его через RestTemplate или что-то в этом роде.
Feign клиент должен иметь имя службы, настроенное и известное, чтобы он вызывал эту конкретную службу в сети, используя обнаружение службы.