微服务初体验(三):集成Gateway网关和Sentinel限流

前言

最近笔者在对微服务架构进行学习,参考了各种项目的技术文章、框架文档以及视频网站,最终选择使用Nacos+Dubbo+Gateway+Sentinel来搭建一个项目练手。其中Nacos作为服务的注册发现中心兼配置中心,Dubbo作为RPC通讯框架来实现服务间的接口调用,而Gateway则作为网关,进行客户端请求的转发,熔断服务则使用Sentinel框架。后续会加入ElasticSearch+SpringSession,进行数据的缓存分级,链路追踪则使用Sleuth,其中还会组合分布式事务框架Seata,有兴趣的朋友可以关注一下,项目地址:https://github.com/peachl/cloud-demo/tree/master#readme,长期更新。

集成Gateway网关

回顾项目上次以及集成了Nacos、Dubbo等框架,现在需要在原有项目上进行集成Gateway的操作,还未配置对应的Nacos、Dubbo的朋友可以回顾一下《微服务初体验(一):整合Nacos进行服务注册和项目初始化》《微服务初体验(二):使用Nacos作为配置中心并集成Dubbo》之前的内容。

之前的项目中已经集成了Gateway这个模块,现在只需要修改Gateway模块对应的Maven依赖和对应的yaml路由转发规则即可。首先打开对应的pom.xml删除其中的多余web依赖,然后引入如下依赖:

        <!-- 公共依赖模块-->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>cloud-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!-- Gateway网关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>2.2.4.RELEASE</version>
        </dependency>

        <!-- nacos注册中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

开始编写Gateway对应的路由配置,打开cloud-gateway模块下的application.yml配置文件,编写下列规则:

server:
  port: 80

spring:
  application:
    name: gateway

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

    gateway:
      routes:
        - id: consumer_route
          #uri后面指定消费者的服务id
          uri: lb://consumer
          predicates:
            #匹配条件
            - Path=/**

重启项目,然后通过访问80通过网关转发请求至consumer模块的Controller中,可以看到下图访问的是80端口但是请求已经被转发至8011端口的consumer服务上了,至此Gateway网关集成完毕。


集成Sentinel进行限流

Sentinel是阿里推出的一个分布式系统的流量管控框架,可以很好的对流量进行削峰降级、负载均衡之类的管控,首先在common模块中引入相关依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

引入依赖完毕后去github上下载对应的jar,记得要选择对应的版本,笔者这里的对应的版本是1.7.1
下载完毕之后使用java -jar命令启动

如图所示Sentinel启动成功

访问8080端口,账号和密码都是sentinel

配置对应yml文件

spring:
  cloud:
    sentinel:
      transport:
        #本机Sentinel的控制台地址
        dashboard: localhost:8080
        #当前服务和Sentinel通讯的端口
        port: 8719

由于Sentinel是懒加载,所以在请求完该接口后才会出现对应的数据,所以现在直接访问会出现Sentinel控制台内容为空的情况,多刷新几次请求接口即可显示对应的接口数据


通过簇点链路可针对请求进行流控、降级等操作

以上Nacos整合Gateway、Sentinel等框架已完成,框架中具体的配置和复杂实现还是要根据项目实际情况去配置,在此只是简单的搭建出对应Demo。

路漫漫其修远兮,吾将上下而求索

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容