五、springCloudAlibaba基础篇(Gateway网关篇)

一、什么是微服务网关

这里只演示下基础使用,让大家看下效果,后期也许会出个高级使用,
如果看过前几篇文章的话就会发现,由于我们的项目拆分为了多个子服务,不同子服务之间配置的IP与端口号不一样,做为开发者我们会使用注册中心给项目配置一个名称,通过别名调用来实现不同子服务之间的相互调用,但是对于访问用户来说,他只有一个访问地址(一般是域名),他不可能记住对应子服务的IP去调用,这时网关的重要性就体现出来了
举个例子比如我一台机器部署了俩子服务,占用了8081端口的是用户消费服务,8082是订单消费模块。你不能让用户,一会调用127.0.0.1:8081,一会调用127.0.0.1:8082吧,那如果以后配置十几个用户可能都懒得用你制作的软件了。
网关可以只通过访问一个指定端口,根据匹配的规则去访问对应的微服务模块。比如网关端口为9999,我调用127.0.0.1:9999/xp1/user/1,localhost:9999/xp2/user/1,我可以根据设置,比如xp1开头的请求去微服务一,xp2开头的路径去微服务二。调用localhost:9999/xp1/user/1 ,解析后等同于直接调用localhost:8081/user/1 这样。

二、网关还能做什么

统一入口:提供所有微服务的入口点,起到隔离作用,保障服务的安全性
鉴权校验:验证是否认证和授权
限流熔断:限制接口在规定时间内访问次数

三、3个核心概念

Route(路由):路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由。根据断言结果,来决定该请求发往哪个真实的url地址

Predicate(断言):可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由。

Filter(过滤):使用过滤器,可以在请求被路由前或者之后对请求进行修改。

四、环境准备

在这篇文章的基础上新增网关模块: springCloudAlibaba基础篇(分布式事务)

1、网关模块配置

网关模块不要引入spring-boot-starter-web依赖,只需要引入注册中心和网关依赖就可以使用,下图是项目结构与配置文件

<dependencies>
    <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>
</dependencies>

在这里插入图片描述

2、测试效果

routes:
	- id: provider-01_userLog_test2
	  uri: lb://provider-01
	  # uri: http://11.11.111.1111:1111  ###这个随便写个,不能为空
	  predicates:
	    - Path=/provider-01/**
	  filters:
	    - StripPrefix=1 # 移除前缀

上图是我配置文件配置的路由,注意id前面有个-,表示可以配置多个路由。
下图是我访问的地址,localhost:8102/userLog/test2是用于插入用户的一个接口,然而通过路由解析访问localhost:9999/provider-01/userLog/test2也会实际去执行插入与用户接口。我们看配置文件的配置如下:
id: 路由的唯一标识,为了保证唯一性,我这里用的是服务名称 + 下划线 + 路径1 + 下划线 + 路径…N的形式,只要保证唯一即可
uri: 路由匹配规则通过时,要去访问的真实地址,可以写真实地址与端口号,但如果是通过微服务名称的方式访问则写lb://微服务名称
predicates:断言,也就是具体的匹配规则,注意是下划线开头,意味着可以设置多个,只有多个匹配规则都通过了,才回去跳转到uri设置的地址。这里的Path表示路径判断,表访问地址含有用provider-01/开头下的所有地址
filters: 过滤器,通过了断言判断后,可额外对本次请求做的操作。也可以设置多个。这里设置了StripPrefix=1,用于移除前缀,而这里指的前缀就是路径第一个部分/provider-01/。如果没有设置,它真实的访问地址就会是http://localhost:8102/provider-01/userLog/test2,导致访问不到接口。
在这里插入图片描述

3、将上图路由配置文件改为编码方式

这样写效果是一样的,但还是推荐使用配置文件,可以直接在nacos上面实时添加与调整


@Configuration
public class MyRoutes {
    @Bean
    public RouteLocator provider01Routes(RouteLocatorBuilder routeLocatorBuilder) {
        RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
        routes.route("provider-01_userLog_test2", r -> r.path("/provider-01/**")
                .filters(f -> f.filters().stripPrefix(1)
                )
                .uri("lb://provider-01")
        ).build();
        return routes.build();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值