>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 11272 个阅读者 刷新本主题
 * 贴子主题:  【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

[这个贴子最后由 sunweiqin 在 2024-07-11 13:45:45 重新编辑]
  Java面向对象编程-->继承
  JavaWeb开发-->访问数据库(Ⅱ)
  JSP与Hibernate开发-->映射对象标识符
  Java网络编程-->Socket用法详解
  精通Spring-->Vue组件开发高级技术
  Vue3开发-->Vue简介
  【Vue.js技术专题】组件的递归
  【Vue.js技术专题】Vuex中异步操作
  【Spring Cloud Alibaba专题】按照集群模式搭建Redis集群
  【Spring Cloud Alibaba专题】OpenFeign开启对请求和响应数据...
  向小伙伴们推荐我所创作前后端编程书籍的学习顺序
  【Spring专题】把Model的数据存放在session范围
  【Spring专题】@ControllerAdvice注解的用法
  【持久化专题】映射对象标识符的基本原理
  【持久化专题】@Access注解设定Hibernate访问类的属性的方式
  【持久化专题】FetchType.LAZY延迟检索策略
  【Java网络编程专题】用Apache HttpClients下载网上的图片等...
  【Java网络编程专题】用Java套接字编写基本的客户/服务器程序
  【JavaWeb专题】在Servlet中利用Apache开源类库实现文件上传
  我的计算机书籍创作心得
  IT培训课、视频教程和书本之PK
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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