定制网站GateWay实现负载均衡

GateWay实现

通过GateWay定制网站实现负载均衡的两种方式

定制网站自动负载均衡

定制网站首先看一下网关服务9999的yml配置:

  1. gateway.discovery.locator.enabled: true #定制网站定制网站开启自动路由功能
  2. routes中的uri定制网站其实最后是不需要服务名称的,定制网站这个位置其实只需要指定的localhost:9001即可
server:  port: 9999spring:  application:    name: cloud-gateway-service  cloud:    nacos:      discovery:        server-addr: localhost:8848    gateway:      discovery:        locator:          enabled: true #开启自动路由功能,定制网站根据服务名称自动创建routes      routes:  # 路由        - id: nacos-provider #路由ID,没有固定要求,但是要保证唯一,建议配合服务名          uri: http://localhost:9001/nacos-provider # 匹配提供服务的路由地址          predicates: # 断言            - Path=/th/** # 断言,路径相匹配进行路由
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

所以这个位置可以把当前的配置优化为以下情况,它是一样可以启动的,可以进行测试启动9001和网关9999,通过网关来访问"localhost:9999/th/**"

server:  port: 9999spring:  application:    name: cloud-gateway-service  cloud:    nacos:      discovery:        server-addr: localhost:8848    gateway:      routes:  # 路由        - id: nacos-provider #路由ID,没有固定要求,但是要保证唯一,建议配合服务名          uri: http://localhost:9001 # 匹配提供服务的路由地址          predicates: # 断言            - Path=/th/** # 断言,路径相匹配进行路由
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

GateWay还提供了和Zuul类似的自动路由规则,具体配置如下:

  1. discovery.locator.enabled: true #这个配置默认为false,但是如果为true,就是开启了通过serviceId转发到具体的服务实例。“localhost:9999/ServiceID/th/**”
  2. 在配置好这些以后,我们可以直接通过服务名称来进行访问Nacos中注册的服务和对应的接口
  3. 这个位置我们为了测试可以启动2个微服务9001、9002
  4. GateWay在开启了自动路由以后,还自带负载均衡
server:  port: 9999spring:  application:    name: cloud-gateway-service  cloud:    nacos:      discovery:        server-addr: localhost:8848    gateway:      discovery:        locator:          enabled: true #是否与服务发现组件进行结合,通过serviceId转发到具体的服务实例。默认为false,设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

9002和9001保持一致,Controller保持一致,负载均衡测试

package com.tianhao.cloudalibabanacos9002.controller;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/th")public class DemoController {    @Value("${server.port}")    private String serverPort;    @GetMapping(value = "/get")    public String getServerPort(){        return "库存-1:"+serverPort;    }    @GetMapping(value = "custom")    public String customTest(){        return "测试网关配置类~~custom";    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

测试结果:

  • 访问地址:

手动负载均衡

在以上的配置中,其实是有问题的,问题在于当前的服务名称暴露,并且太过于灵活,那么如果想解决的话,其实可以进行手动配置。

具体配置如下:

server:  port: 9999spring:  application:    name: cloud-gateway-service  cloud:    nacos:      discovery:        server-addr: localhost:8848    gateway:      discovery:        locator:          enabled: true #开启自动路由功能(此时可以关闭)      routes: # 路由        - id: nacos-provider #路由ID,没有固定要求,但是要保证唯一,建议配合服务名          uri: lb://nacos-provider # 匹配提供服务的路由地址          predicates: # 断言            - Path=/th/** 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

测试

我们现在开启9001/9002两个服务和9999网关服务,然后此时我们可以通过网关去访问:

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发