zoukankan      html  css  js  c++  java
  • Spring Cloud Gateway 集成 Nacos 实现请求负载

        如图所示,是spring cloud gateway 集成 Nacos 实现负载均衡的架构图,下面演示一下整个实现过程,首先准备如下项目。

    • spring-cloud-gateway-nacos-provider, 提供REST服务,并将服务注册到Nacos上。
    • spring-cloud-gateway-nacos-consumer, 提供网关路由,基于Nacos 服务注册中心。

        spring-cloud-gateway-nacos-provider服务的构建过程如下,该项目提供REST接口,并且将该注册到Nacos服务器上。

    添加相关Jar包依赖,Spring Cloud 使用的版本为 Greenwich.SR2.

    <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter<artifactId>
         <version>2.1.2.RELEASE</version>
    </dependency>
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web<artifactId>
         <version>2.1.1.RELEASE</version>
    </dependency>
    <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-alibaba-nacos-discovery<artifactId>
         <version>2.1.1.RELEASE</version>
    </dependency> 
    •  创建NacosController, 提供一个/say 接口
     1 @RestController
     2 
     3 Public Class NacosController {
     4     
     5    @GetMapping("/say")
     6    Public String sayHello(){
     7         return "[spring-cloud-nacos-gatewayh-provider]:sayHello";
     8     }
     9 
    10 }
    • 在application.yml 中添加服务注册地址的配置
    spring:
      application:
        name: spring-cloud-nacos-gateway-provider
      cloud:
         nacos:
          discovery:
            server-addr: 192.168.216.128:8848
    
    server:
      port: 8080
            

       为了演示请求负载,将 spring-cloud-gatewa-nacos-provider 部署两份,分别开放8080 和 8081端口。 服务启动成功之后,进入Nacos Dashboard 的服务列表。

      spring-cloud-gateway-nacos-consumer 作为网关,会从Nacos 上根据服务名称获取目标URI进行服务调用。

      添加Jar 依赖。

    <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter<artifactId>
         <version>2.1.2.RELEASE</version>
    </dependency>
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web<artifactId>
         <version>2.1.2.RELEASE</version>
    </dependency>
    <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-alibaba-nacos-discovery<artifactId>
         <version>2.1.1.RELEASE</version>
    </dependency> 
    • 在application.yml 中添加如下配置。
    server:
      port: 8888
    
    
    
    spring:
      application:
        name: spring-cloud-nacos-gateway-consumer
      cloud:
        nacos:
          discovery:
                    server-addr: 192.168.216.128.8848
        gateway:    
          discovery:
            locator:
              enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
              lowerCaseServiceId: true
          routes:
              id: nacos-gateway-provider    #路由的ID,没有固定规则但要求唯一,建议配合服务名
            
              uri: lb://apring-cloud-nacos-gateway-provider
              #匹配后提供服务的路由地址
              predicates:
                - Path=/nacos/**         # 断言,路径相匹配的进行路由
               filters:
                -StripPrifix=1

    关键配置如下:

    • lower-case-service-id:  是否使用service-id 的小写, 默认是大写。
    • spring.cloud.gateway.discovery.locator.enabled: 开启从注册中心动态创建路由的功能。
    • uri:   其中配置的lb://表示从注册中心获取服务,后面的spring-cloud-nacos-gateway-provider 表示目标服务在注册中心上得服务名。

        通过curl指令访问网关,如果配置成功,将会正确返回目标服务的内容。

    curl   http://localhost:8888/nacos/say
    

      

  • 相关阅读:
    命名空间 和 class_exist() 问题
    浏览器中打开文件
    memcach 安装
    MySQL事务机制
    Xcode10更新报错:library not found for -lstdc++.6.0.9
    appium-chromedriver@3.0.1 npm ERR! code ELIFECYCLE npm ERR! errno 1
    npm audit fix
    使用WebStorm/IDEA上传本地项目到GitHub
    vue-cli(vue脚手架)超详细教程
    [Swift 开发] 使用闭包传值(typealias)
  • 原文地址:https://www.cnblogs.com/chengxiaoxiao/p/15012313.html
Copyright © 2011-2022 走看看