2022-6月更文挑战2-springcloud微服务间调用会经过网关么

849 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

关于springcloud请求与网关关系的一些思考

springcloud请求什么情况下会经过网关?

首先来说结论,在不进行特殊处理的情况下,只有当客户端通过网关地址发起请求时,请求才会经过网关。网关一般情况下需要负责将请求负载均衡到对应的服务中,同时可以在网关中增加一些过滤等身份验证逻辑,或对请求进行进一步的包装处理等。

springcloud微服务间调用会经过网关么?

常规来讲不会。springcloud的核心思想主要在于将服务注册到注册中心当中,当服务间需要调用时,需要在openfeign中进行目标服务的指定,通过注册中心中注册的地址获取实际的调用地址,从而使得微服务之间完成调用。这种方式微服务间调用的请求是不会经过网关的。简单看一个最常规的feign配置服务间调用的代码:

@FeignClient(name = "test-feign-service",fallbackFactory = FeignFallbackFactory.class)
public interface TestFeign extends FallbackEnableFeignClient {

    @PostMapping(value = "/test")
    String test();
}

上述是通过feign进行服务间调用的代码,实际请求的执行路径只是在注册中心中获取到实际的test-feign-service请求的地址,再直接通过http请求向目标地址发送请求,中间不会经过网关层。

如何让微服务间请求经过网关

那么如果需要让服务经过网关怎么做,主要的核心思想在于从注册中心中获取的请求地址变更为实际的网关地址。那么就需要进行feign配置的修改,使得实际调用的服务名称为网关名,再通过请求地址进行调整,请求地址中包含实际的服务名称。这种方式即可使得请求会经过网关,可以将微服务间的请求增加一层网关处理,例如身份验证等等。但要注意的是,这种方式需要进行contextId的指定。

@FeignClient(contextId = "gateway",name = "gateway-service",fallbackFactory = FeignFallbackFactory.class)
public interface TestFeign extends FallbackEnableFeignClient {

    @PostMapping(value = "test-feign-service/test")
    String test();
}

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。