Spring Cloud Kubernetes FeignClient错误

时间:2019-03-08 14:28:52

标签: spring spring-boot kubernetes spring-cloud-feign spring-cloud-kubernetes

我正在将Spring Cloud Kubernetes与Spring Boot配合使用,并满足项目所需的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>

我在Kubernetes中运行2个微服务

  1. my-service
  2. some-service

my-service与Spring Boot 2.x一起运行,some-service与Spring Boot 1.x一起运行。这两种服务都通过Kubernetes Service以及适当的端点公开。

application.yaml的{​​{1}}的摘录如下。

my-service

使用的FeignClient如下。

some-service:
      url: http://some-service:8080
      serviceName: some-service

我也做了//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应该能够通过kubernetes服务发现与my-service进行对话,但是我得到了这个错误。

some-service

我无法理解我在做什么错。另外,由于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。

有人可以帮忙吗?此外,请注意,如果通过Ingress进行访问,则该服务可以与端口转发一起正常工作。

2 个答案:

答案 0 :(得分:1)

如果您没有为某项服务设置名称,并且它是第三方服务,那么我认为更好的方法是通过RestTemplate或其他名称进行调用。

伪客户端需要配置并知道服务名称,以便它使用服务发现来调用网络中的特定服务。

答案 1 :(得分:1)

好吧,我发现差异在于some-service的有效负载已更新,而my-service的FeignClient没有更新。因此导致HTTP 404错误。但是,它现在可以正确地与FeignClient一起使用,并且能够正确地使用服务名称进行服务发现。