Spring Cloud Kubernetes FeignClient 错误
Spring Cloud Kubernetes FeignClient Error
我正在使用 spring 具有 spring 引导和项目所需的必要 RBAC 要求的云 kubernetes。
<!-- 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 个微服务 运行
my-service
some-service
my-service
是 运行 spring 引导 2.x 而 some-service
是 运行 Spring 引导 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
应该能够通过 kubernetes 服务发现与 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
我无法理解我做错了什么。另外,我没有为 some-service
设置 spring.application.name,因为它是第三方服务。
有人可以帮忙吗。另外仅供参考,如果通过 Ingress 访问,服务可以通过端口转发正常工作。
如果您没有为某些服务设置名称,并且它是第 3 方服务,我认为更好的方法是通过 RestTemplate 或其他方式调用它。
Feign 客户端需要配置并知道服务名称,才能使用服务发现在网络中调用该特定服务。
嗯,我发现不一致是在some-service
更新了payload而my-service
FeignClient没有更新。因此导致了 HTTP 404 错误。但是,它现在可以正确地与 FeignClient
一起使用,并且能够正确地使用服务名称进行服务发现。
我正在使用 spring 具有 spring 引导和项目所需的必要 RBAC 要求的云 kubernetes。
<!-- 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 个微服务 运行my-service
some-service
my-service
是 运行 spring 引导 2.x 而 some-service
是 运行 Spring 引导 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
应该能够通过 kubernetes 服务发现与 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
我无法理解我做错了什么。另外,我没有为 some-service
设置 spring.application.name,因为它是第三方服务。
有人可以帮忙吗。另外仅供参考,如果通过 Ingress 访问,服务可以通过端口转发正常工作。
如果您没有为某些服务设置名称,并且它是第 3 方服务,我认为更好的方法是通过 RestTemplate 或其他方式调用它。
Feign 客户端需要配置并知道服务名称,才能使用服务发现在网络中调用该特定服务。
嗯,我发现不一致是在some-service
更新了payload而my-service
FeignClient没有更新。因此导致了 HTTP 404 错误。但是,它现在可以正确地与 FeignClient
一起使用,并且能够正确地使用服务名称进行服务发现。