分布式之Gateway 网关

 1. 简介

微服务架构中,单个应用会被划分成多个子服务,客户端访问这些服务时,需要考虑每个服务的访问地址,这个过程会比较复杂。而Gateway将这些微服务进行统一管理,对外提供一个「统一的访问地址」,并将请求由网关路由到对应的子服务上去,从而提高系统的效率和可维护性。

2. gateway-service

创建 gateway-service 模块

2.1 pom.xml

添加如下依赖

  • spring-cloud-starter-alibaba-nacos-discovery服务注册与发现依赖

  • spring-cloud-starter-gateway网关依赖

  • spring-cloud-loadbalancer负载均衡依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

2.2 application.properties

nacos相关配置和网关相关配置

# 应用名称
spring.application.name=gateway-service
server.port=10000
# nacos
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.server-addr=http://localhost:8848
# gateway
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-service-id=true

2.3 MyFilter

自定义过滤器,打印请求的路径。类似:/consumer-service/consumer/test。我们后续可以在网关过滤器做一些权限认证等操作。

@Component
public class MyFilter implements WebFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        String path = request.getPath().toString();
        // 打印请求路径,生产环境可以在此做一些权限认证等
        System.out.println(path);
        return chain.filter(exchange);
    }
}

3. 测试

请求地址类型是服务名加上接口:http://ip/服务名/接口url

http://localhost:10000/consumer-service/consumer/test?name=zhangsan

gateway-service->consumer-service->provider-service

4. 总结

Gateway提供了一个「单一的入口点」,用于管理所有的服务请求。

在实际项目部署中,用户的请求在外网(公网)通过nginx转发到内网网关gateway,然后gateway会去调用具体的服务处理请求。

加上网关后整体的架构如下:

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

missterzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值