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 микросервиса

  1. my-service
  2. 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 клиент должен иметь имя службы, настроенное и известное, чтобы он вызывал эту конкретную службу в сети, используя обнаружение службы.

Другие вопросы по тегам