谷粒商城之中间件Nacos和Gateway的搭建

目录

谷粒商城最终的技术搭配方案:

alibaba各组件之间的版本、与SpringBoot的版本对应关系:

搭建Nacos注册中心

远程服务调用

搭建Nacos配置中心

Nacos配置中心动态刷新配置

Nacos命名空间与配置分组

Nacos配置多配置集

搭建gateway网关


谷粒商城最终的技术搭配方案:

SpringCloud Alibaba-Nacos:注册中心和配置中心

SpringCloud Alibaba-Gateway:API网关

SpringCloud Alibaba-Openfeign:服务之间的调用

SpringCloud Alibaba-Sentinel:服务容错

SpringCloud Alibaba-Sleuth:调用链监控

SpringCloud Alibaba-Seata:分布式事务解决方案

alibaba各组件之间的版本、与SpringBoot的版本对应关系:

版本对应说明地址:版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

 服务中使用的boot是2.3.7版本,cloud使用的是Hoxton.SR9,应该要去使用alibaba2.2.7的版本

谷粒商城之中间件Nacos和Gateway的搭建

Nacos下载的地址:Nacos 快速开始

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

 先在Windows操作系统上使用Nacos

谷粒商城之中间件Nacos和Gateway的搭建

点击startup.cmd启动nacos

谷粒商城之中间件Nacos和Gateway的搭建

访问下面的地址进入它的图形用户界面,默认用户名和密码都是:nacos

http://localhost:8848/nacos

谷粒商城之中间件Nacos和Gateway的搭建

Nacos使用指南:Spring Cloud Alibaba Reference Documentation 

搭建Nacos注册中心

①在common的pom文件中导入依赖管理

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.7.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

②在common的pom文件中导入nacos的依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

③在yml配置文件中配置注册中心的地址和服务名称

谷粒商城之中间件Nacos和Gateway的搭建

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: gulimall-product

④在启动类中添加@EnableDiscoveryClient

谷粒商城之中间件Nacos和Gateway的搭建

 谷粒商城之中间件Nacos和Gateway的搭建

远程服务调用

member服务要调用coupon服务的获取会员优惠券的方法,需要使用open-feign进行远程的服务调用

谷粒商城之中间件Nacos和Gateway的搭建

 ①pom文件中导入open-feign的依赖,创建服务的时候已经选择

谷粒商城之中间件Nacos和Gateway的搭建

②创建接口

谷粒商城之中间件Nacos和Gateway的搭建

        1)、告诉接口需要调用的服务名

谷粒商城之中间件Nacos和Gateway的搭建 

        2)、 告诉接口调用服务的那个方法

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

③启动open-feign,告诉需要扫描的包

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

open-feign的执行流程:

①先扫描需要调用服务的包

②获取服务名到注册中心找相应的服务,如果存在则调用指定的方法,否则调用失败 

搭建Nacos配置中心

指南:Spring Cloud Alibaba Reference Documentation

①在common的pom文件中导入Nacos作为配置中心的依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

谷粒商城之中间件Nacos和Gateway的搭建

②创建bootstrap.properties配置文件,并且配置配置中心的地址和服务名

spring.application.name=gulimall-member
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

谷粒商城之中间件Nacos和Gateway的搭建

Nacos配置中心动态刷新配置

以前我们获取配置文件中的配置项使用下面的方式:

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

 缺陷十分明显,当我们需要修改配置文件时,需要重新打包再发布

解决方案:Nacos动态更新

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

并没有动态更新,原因是没有使用动态更新注解 

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建 谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

服务会默认去配置中心找 服务名.properties的配置文件,如果服务中心配置文件和配置文件中的配置文件有相同的配置项,则默认优先加载配置中心的配置文件的配置项 

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

Nacos命名空间与配置分组

1.命名空间

作用:配置隔离

说明:Nacos配置中心默认的命令空间是public,发布的配置文件默认也是在public命令空间下的

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

使用一:将命名空间分为开发(dev)、生产(prod)、测试(test),将开发、测试、生产之间配置隔离

使用二:每一个服务一个命名空间,服务之间的配置隔离

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

出现问题:点击确定之后卡着不动了 

出现原因:之前使用过低版本的nacos,需要清空一下浏览器的缓存

解决方案:

参考文章:https://github.com/alibaba/nacos/issues?q=customNamespaceId

 ①创建服务的命名空间

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

② 在bootstrap.properties文件中配置命名空间

spring.cloud.nacos.config.namespace=47353e14-12d9-420f-b82c-249f760ff794

谷粒商城之中间件Nacos和Gateway的搭建

 谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

 谷粒商城之中间件Nacos和Gateway的搭建

2.数据集ID(Data Id):类似于文件名

3.配置分组

说明:配置中心默认分组为:DEFAULT_GROUP

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建 在bootstrap.properties配置文件中配置命名空间和分组:

spring.application.name=gulimall-member
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=4c819c0a-d055-4bc8-9cbc-dee92aca56d2
spring.cloud.nacos.config.group=test

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城中的一个服务对应一个命名空间达到服务之间的配置隔离,配置分组来区分开发、测试、生成环境

Nacos配置多配置集

当我们服务越来越复杂,配置项越来越多的时候,我们希望进行一个配置划分,例如配置数据源一个配置文件,配置mybatis框架的一个文件...

谷粒商城之中间件Nacos和Gateway的搭建

 创建数据源配置文件

谷粒商城之中间件Nacos和Gateway的搭建 创建mybatis配置文件

谷粒商城之中间件Nacos和Gateway的搭建

 创建其它配置项配置文件

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建 谷粒商城之中间件Nacos和Gateway的搭建

spring.application.name=gulimall-member
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=4c819c0a-d055-4bc8-9cbc-dee92aca56d2
#spring.cloud.nacos.config.group=dev
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml 
spring.cloud.nacos.config.extension-configs[0].group=dev
#配置动态刷新
spring.cloud.nacos.config.extension-configs[0].refresh=true

spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml 
spring.cloud.nacos.config.extension-configs[1].group=dev
#配置动态刷新
spring.cloud.nacos.config.extension-configs[1].refresh=true

spring.cloud.nacos.config.extension-configs[2].data-id=other.yml 
spring.cloud.nacos.config.extension-configs[2].group=dev
#配置动态刷新
spring.cloud.nacos.config.extension-configs[2].refresh=true

 先加载DEFAULT_GROUP 服务名.properties配置文件

谷粒商城之中间件Nacos和Gateway的搭建

由于没有DEFAULT_GROUP下的 服务名.properties配置文件,所以加载了服务中的配置文件

 谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

然后再去加载扩充的配置文件

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

配置文件生效: 

谷粒商城之中间件Nacos和Gateway的搭建

搭建gateway网关

学习文档:Spring Cloud Gateway

网关的组成:

谷粒商城之中间件Nacos和Gateway的搭建

网关的执行流程: 

谷粒商城之中间件Nacos和Gateway的搭建

简而言之:请求到达网关,网关通过断言判断是否符合路由规则,如果符合将请求发送给对应的服务,不过在这之前需要进行过滤的。

谷粒商城之中间件Nacos和Gateway的搭建

routes:是个数组,可以配置多个路由 

uri:请求的目的地

predicates:数组,可以配置多个,具体配置可以参考学习文档

谷粒商城之中间件Nacos和Gateway的搭建

filters: 数组,可以添加多个

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

添加一个请求头,X-Request-red对应的值为blue 

接下来开始搭建网关并进行简单的测试:

①使用spring初始化向导创建gateway服务

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建②导入common依赖,因为gateway需要注册到nacos中,common中已经有了nacos的依赖 

谷粒商城之中间件Nacos和Gateway的搭建

③编写配置文件

谷粒商城之中间件Nacos和Gateway的搭建

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: gulimall-gateway
server:
  port: 88

④启动类中添加开启服务注册的注解@EnableDiscoveryClient,由于common中还有数据源的依赖,因此需要排除数据源的依赖

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

简单测试:

访问网关,请求路径携带qq或者百度,由网关路由到qq或者百度主页面

谷粒商城之中间件Nacos和Gateway的搭建

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    gateway:
      routes:
        - id: baidu_route
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu
        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq
  application:
    name: gulimall-gateway
server:
  port: 88

谷粒商城之中间件Nacos和Gateway的搭建

谷粒商城之中间件Nacos和Gateway的搭建

上一篇:Spring Cloud Gateway系列【11】网关管理API


下一篇:[Leetcode 11]容器中装最多的水Container With Most Water