|  | 本文参考孙卫琴,杜聚宾所创作的<<Spring Cloud Alibaba微服务开发宝典>>一书,即将出版在以下代码中,每个路由的URI是固定的,例如id为provider-route的路由的URI为 uri: http://localhost:8081
 
 | server: port: 80
 spring:
 cloud:
 gateway:
 routes:
 - id: provider-route
 uri: http://localhost:8081
 order: 1     #路由优先级,数值越小,优先级越高,默认为0
 predicates:
 - Path=/greet/**     #路径匹配的条件,**为通配符
 - id: consumer-route
 uri: http://localhost:8082
 order: 1     #路由优先级,数值越小,优先级越高,默认为0
 predicates:
 - Path=/enter/**     #路径匹配的条件
 | 
 如果微服务的实例改变了监听端口,或者一个微服务有多个实例,那么以上设置方式就很不灵活。为了更灵活地设置路由,可以把GateWay与Nacos整合。在GateWay的路由配置中,只需把URI设置为微服务的名字,与微服务名字对应的具体地址则由Nacos提供。
 
 对于一个hello-gateway网关微服务模块,GateWay与Nacos整合的步骤如下。
 
 (1)在pom.xml文件中加入Nacos以及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-loadbalancer
 </artifactId>
 </dependency>
 | 
 (2)在application.yaml文件中配置GateWay和Nacos:
 
 
 | server: port: 80
 spring:
 application:
 name: hello-gateway-service
 cloud:
 loadbalancer:
 enabled: true  #启用LoadBalancer
 gateway:
 discovery:
 locator:
 enabled: true
 routes:
 - id: provider-route
 uri: lb://hello-provider-service
 order: 1
 predicates:
 - Path=/greet/**
 - id: consumer-route
 uri: lb://hello-consumer-service
 order: 1
 predicates:
 - Path=/enter/**
 nacos:
 discovery:
 server-addr: 127.0.0.1:8848
 | 
 对于id为provider-route的路由,它的URI是hello-provider-service微服务的名字:
 
 
 | uri: lb://hello-provider-service | 
 当spring.cloud.gateway.discovery.locator.enabled属性为true,GateWay就会从Nacos服务器中订阅微服务列表,获得hello-provider-service微服务的实际地址。
 
 把spring.cloud.loadbalancer.enabled属性设为true,GateWay就会利用LoadBalancer负载均衡器来实现负载均衡。在图1中,hello-provider-service微服务有两个实例,因此对应两个地址,LoadBalancer会依据负载均衡策略选择其中的一个地址。spring.cloud.loadbalancer.enabled属性的默认值就是true,因此该属性也可以不显式设置。
 
 
   
 图1  GateWay利用LoadBalancer实现负载均衡
 (3)启动Nacos服务器、hello-provider提供者模块、hello-consumer消费者模块和hello-gateway网关模块,通过浏览器访问以下URL:
 
 http://localhost/greet/Tom
 http://localhost/enter/Tom
 
 访问以上URL的两个HTTP请求首先被GateWay接收,再根据路由配置中路径的匹配规则,把请求分别转发给hello-provider-service微服务和hello-consumer-service微服务。
 
 
 
 
 程序猿的技术大观园:www.javathinker.net
 |  |