Spring Cloud Kubernetes Ошибка FeignClient - PullRequest
0 голосов
/ 08 марта 2019

Я использую весенние облачные 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 работает с весенней загрузкой 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 ]

1 голос
/ 12 марта 2019

Ну, я обнаружил, что расхождение было в some-service, где была обновлена ​​полезная нагрузка, а my-service FeignClient не был обновлен. и, следовательно, вызвало ошибку HTTP 404. Однако теперь он работает с FeignClient должным образом и может правильно выполнять обнаружение службы с именем службы.

1 голос
/ 08 марта 2019

Если у вас не установлено имя для какого-либо сервиса, а это сервис стороннего производителя, я думаю, что лучшим подходом было бы вызвать его через RestTemplate или что-то в этом роде.

Клиенту Feign необходимо настроить имя службы и узнать его, чтобы он вызывал эту конкретную службу в сети с помощью обнаружения службы.

...