Skip to content

微服务架构中的服务调用说明

随着spring boot和spring cloud等微服务框架的发展以及Kubernate等服务编排引擎的发展,我们在调用自己服务或者他人服务的时候经常会遇到怎么调用的问题。

系统拓扑

image

通过注册中心调用

如果你使用的spring cloud服务和注册发现功能,那么你可以通过注册名称进行调用,服务的注册名称一般是服务的spring.application.name。例如:

@FeignClient(
        name = "user-service",
        url = "${user.service-url:}"
)
public interface UserClient {
    ...
}

此处的user-service就是服务的注册名称,Fiegn可以通过注册中心就获取这个名字对于的注册地址,端口等信息,再进行调用,这种调用方式通常不可以调用spring cloud集群外的服务。

通过Kubernate内部的服务名调用

如果你的服务部署在k8s集群里面,那么你可以将地址设置成k8s内部服务名地址,注意这时候的地址一般是需要带上端口号的,如下:

@FeignClient(
        name = "user-service",
        url = "${user.service-url:http://user-service:8080}"
)
public interface UserClient {
    ...
}

此处的user-service:8080就是配置成了k8s的服务名,通常通过服务名调用也不需要token,并且可以调用相同k8s集群里任意的服务。

通过网关地址调用

一般spring cloud里的服务暴露给外面访问时都会通过一个网关服务,比如spring cloud gateway,网关上可以设置token校验,白名单和黑名单,这个方式就需要将url设置成网关地址,并且要设置请求的头部,设置token等,并且一般的协议都是https,一般不带端口号。

@FeignClient(
        name = "user-service",
        url = "${user.service-url:https://www.gateway.xxx.com}",
        configuration = GateWayAuthContiguation.class
)
public interface UserClient {
    ...
}

此处的https://www.gateway.xxx.com就是配置成了网关地址,此时你需要一个配置类来实现往header加入token。