>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 8338 个阅读者 刷新本主题
 * 贴子主题:  【Spring Cloud Alibaba专题】GateWay与Nacos整合 回复文章 点赞(0)  收藏  
作者:sunweiqin    发表时间:2022-08-25 10:04:43     消息  查看  搜索  好友  邮件  复制  引用

本文参考孙卫琴,杜聚宾所创作的<<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,因此该属性也可以不显式设置。

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

图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
  Java面向对象编程-->Lambda表达式
  JavaWeb开发-->Web运作原理(Ⅲ)
  JSP与Hibernate开发-->数据库事务的概念和声明
  Java网络编程-->对象的序列化与反序列化
  精通Spring-->通过Vuex进行状态管理
  Vue3开发-->计算属性和数据监听
  【Vue.js技术专题】CSS中DOM元素的过渡模式
  【Vue.js技术专题】插槽slot的基本用法
  【Spring Cloud Alibaba专题】@SentinelResource注解的用法
  【持久化专题】为什么JPA和Hibernate的持久化方法都抛出运行...
  【Spring专题】把Model的数据存放在session范围
  【Spring专题】@Query和@Modifying注解的增删改操作
  从《精通Spring》和《精通Vue.js》的写作分享学习新技术的经...
  【持久化专题】JPA API的级联操作
  【持久化专题】@Access注解设定Hibernate访问类的属性的方式
  【持久化专题】JPA API的基本用法
  【持久化专题】对象-关系的映射概念
  【Java网络编程专题】盘点用Java抓取HTTP服务器和FTP服务器的...
  【JavaWeb专题】Spring MVC创建Web应用范例,轻松入门
  《大话Java程序设计从入门到精通》写作花絮
  【JavaWeb专题】选择32位或64位JDK或者Apache HTTP服务器的安...
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。