>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 8339 个阅读者 刷新本主题
 * 贴子主题:  【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面向对象编程-->按面向对象开发的基础范例
  JavaWeb开发-->访问数据库(Ⅱ)
  JSP与Hibernate开发-->第一个helloapp应用
  Java网络编程-->RMI框架
  精通Spring-->CSS过渡和动画
  Vue3开发-->计算属性和数据监听
  【Vue.js技术专题】分割setup()函数
  【Vue.js技术专题】组件的递归
  【Vue.js技术专题】在Vue项目中使用Axios
  【Java基础编程专题】浮点数的格式化以及运算精度
  【Spring专题】Spring MVC是否过时?
  【Spring专题】服务器端推送
  【Spring专题】用Spring框架进行文件下载
  【持久化专题】用@Formula注解映射派生属性
  【持久化专题】FetchType.LAZY延迟检索策略
  【Java网络编程专题】用Java套接字访问HTTP服务器读取网页数...
  【Java网络编程专题】创建基于SSL的安全服务器和安全客户的范...
  【JavaWeb专题】在Servlet中利用Apache开源类库实现文件上传
  IT技术书写作技巧分享:慎用概念和术语
  【JavaWeb专题】选择32位或64位JDK或者Apache HTTP服务器的安...
  【Java基础编程专题】为什么说:继承关系最大的弱点就是打破...
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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