微服务实战系列之SpringCloud Alibaba学习(六)

微服务实战系列之SpringCloud Alibaba:

  • 微服务实战系列之SpringCloud Alibaba学习(一)
  • 微服务实战系列之SpringCloud Alibaba学习(二)
  • 微服务实战系列之SpringCloud Alibaba学习(三)
  • 微服务实战系列之SpringCloud Alibaba学习(四)
  • 微服务实战系列之SpringCloud Alibaba学习(五)
  • 微服务实战系列之SpringCloud Alibaba学习(六)

在微服务实战系列之SpringCloud Alibaba学习(一)中,学习了搭建三大微服务并完成交互开发与测试。

在微服务实战系列之SpringCloud Alibaba学习(二)中,针对微服务会遇到的一些问题,使用了一些微服务组件来解决,实现了用户微服务、商品微服务和订单微服务之间的远程调用,并且实现了服务调用的负载均衡。也基于阿里开源的Sentinel实现了服务的限流与容错,并详细介绍了Sentinel的核心技术与配置规则 。如下:

  • 使用Nacos来实现服务的注册与发现
  • 使用Ribbon来实现服务调用的负载均衡
  • 使用Sentinel实现接口限流

在微服务实战系列之SpringCloud Alibaba学习(三)中,简单介绍了服务网关,并对SpringCloud Gateway的核心架构进行了简要说明,也在项目中整合了SpringCloud Gateway网关实现了通过网关访问后端微服务,另外,也基于SpringCloud Gateway整合Sentinel实现了网关的限流功能。

  • 使用SpringCloud Gateway网关实现了通过网关访问后端微服务以及限流功能

在微服务实战系列之SpringCloud Alibaba学习(四)中,学习分布式链路追踪技术与解决方案。随后在项目中整合Sleuth实现了链路追踪,并使用Sleuth整合ZipKin实现了分布式链路追踪的可视化

在微服务实战系列之SpringCloud Alibaba学习(五)中,学习消息服务MQ、项目整合RocketMQ以及RocketMQ核心技术

在微服务实战系列之SpringCloud Alibaba学习(六)中,学习服务配置介绍与Nacos核心概念,项目整合Nacos配置中心。

文章目录

      • 1. 服务配置
        • 1.1 配置散落存储
        • 1.2 配置中心
        • 1.3 配置中心解决方案
        • 1.4 Nacos配置中心概念
      • 2. 项目整合Nacos配置中心
        • 2.1 环境准备
        • 2.2 服务整合Nacos配置中心
          • 2.2.1 用户微服务整合配置中心
          • 2.2.2 商品微服务整合配置中心
          • 2.2.3 订单微服务整合配置中心
          • 2.2.4 网关服务整合配置中心
          • 2.2.5 查看Nacos中的配置
        • 2.3 整合Nacos配置中心测试
      • 3. 服务配置:实现动态刷新与配置共享
        • 3.1 实现动态刷新
          • 3.1.1 修改Nacos配置
          • 3.1.2 通过IOC容器获取Nacos配置
          • 3.1.2 通过注解获取Nacos配置
        • 3.2 实现配置共享
          • 3.2.1 单服务多环境实现共享
          • 3.2.2 多服务配置实现共享

1. 服务配置

Nacos在微服务开发过程中,既可以用作注册中心,也可以用作配置中心。在《微服务实战系列之SpringCloud Alibaba学习(二)》专栏学习了使用Nacos实现了注册中心,在接下来的服务配置章节,我们就使用Nacos实现配置中心。

1.1 配置散落存储

当我们的项目采用微服务架构后,原本单一的项目会被拆分为一个个小的微服务。原来项目中的配置文件就需要在每个微服务下都要存储一份,这些配置文件中的内容大部分都是相同的,只有个别的配置项不同。就拿数据库配置来说吧,如果每个微服务使用的技术栈都是相同的,则每个微服务中关于数据库的配置几乎都是相同的,有区别的地方可能就是:数据库连接,用户名和密码。

微服务实战系列之SpringCloud Alibaba学习(六)_第1张图片
当项目采用微服务架构后,原本在单体项目中的配置文件就会散落在各个微服务中,如果不对这些散落的配置文件进行处理,就会造成各种各样的问题。总结起来,这些问题主要体现在如下几个方面。

  1. 配置文件散落在各个微服务项目中,随着整体项目的业务越来越复杂,后续会新增更多的微服务项目,微服务项目越来越多,则散落在微服务中的配置文件也会越来越多,后续会变得难以统一维护和管理。
  2. 配置文件散落在各个微服务项目中,还有一个非常棘手的问题,那就是修改配置文件非常麻烦。需要我们手动去修改每个微服务下的配置文件,稍有不慎,还会增加微服务项目出错的风险。
  3. 一般情况下,企业的项目发布环境包含开发环境、测试环境、预发布环境、生产环境。每个环境都需要对应不同的配置文件,如果不对这些配置文件进行统一管理,则每次发布到不同的环境时,都需要我们手动去修改每个微服务的配置文件,维护起来也是非常繁琐的。
  4. 在微服务中,手动修改了配置文件之后,修改后的具体的配置项无法在微服务项目中实时更新。每次修改配置文件后,都需要重新启动微服务项目。不管是从开发角度,还是从运维角度,都是非常不友好的。
1.2 配置中心

基于上面的种种原因,我们绝不允许配置文件长期在各个微服务项目中分散存储,那有没有什么办法将这些配置文件统一存放和管理呢?答案就是使用配置中心

在对配置中心的定义中,涵盖了三项重要内容。

  1. 配置中心将各个微服务中的配置进行统一集中管理和维护,并且对外提供统一的接口获取相关配置。
  2. 配置中心支持微服务主动调用配置中心的接口获取配置信息。
  3. 配置信息发生变更时,配置中心能够实时并且主动向各个微服务通知服务配置发生了变更,使其同步最新的配置信息。

这里,我们还是以商城微服务化后为例,当引入配置中心后,数据库配置信息,如下图所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第2张图片可以看到,在微服务中引入配置中心后,配置信息不再存储到各个微服务项目中,也不用再手动修改每个微服务项目中的配置信息。而是在配置中心统一进行管理和维护。各个微服务会调用配置中心的接口获取配置信息。当配置中心的配置信息发生变更时,配置中心会主动并且实时通知各个微服务,使其获取配置中心的最新配置信息。

1.3 配置中心解决方案

针对项目采用微服务架构后的配置文件的存储与管理问题,业界也提出了不少解决方案,也开源出了很多不错的优秀项目,这里就给大家简单列举几个。
微服务实战系列之SpringCloud Alibaba学习(六)_第3张图片

1.4 Nacos配置中心概念

微服务实战系列之SpringCloud Alibaba学习(六)_第4张图片

2. 项目整合Nacos配置中心

2.1 环境准备

分别在用户微服务shop-user,商品微服务shop-product,订单微服务shop-order和网关服务shop-gateway中的pom.xml文件中添加如下依赖。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.2 服务整合Nacos配置中心

这里,我们将用户微服务,商品微服务,订单微服务和网关服务的配置信息都放在Nacos中。

「注意:将微服务的配置放在Nacos中时,就暂时不用微服务中的application.yml配置文件了,而是在项目中新建一个bootstrap.yml文件。因为配置文件的优先级从高到低依次为:bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml。」

2.2.1 用户微服务整合配置中心

(1)在用户微服务shop-user的resources目录下新建bootstrap.yml文件,文件内容如下所示。

spring:
  application:
    name: server-user
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        group: user_group
  profiles:
    active: dev

(2)启动Nacos,在浏览器中输入http://localhost:8848/nacos并登录Nacos,选择Nacos菜单中的配置管理-配置列表,如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第5张图片(3)点击配置列表界面中的 「+」 ,如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第6张图片点开后的界面如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第7张图片
其中各个配置项的含义如下所示。

  • Data ID就是配置集ID,通常情况下就是某个配置文件的ID,这个ID的命名遵循一定的规则,如下所示。
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

这里,对应到用户微服务的Data ID就是:server-user-dev.yaml。所以,对于用户微服务来说,我们在Data ID中输入server-user-dev.yaml。

  • Group:配置分组,配置分组要与spring.cloud.nacos.config.group对应,用户微服务的配置分组就是user_group。
  • 描述:对当前配置的简单描述。例如,用户微服务的开发环境配置。
  • 配置格式:表示配置内容所使用的文件格式,这里我们选择YAML格式。
  • 配置内容:配置文件的内容,这里我们直接将application.yml文件的内容复制进去即可。

配置好之后的内容如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第8张图片
配置好之后点击页面的发布按钮,如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第9张图片发布成功后会跳转到配置管理-配置列表界面,如下所示。

微服务实战系列之SpringCloud Alibaba学习(六)_第10张图片
(4)注释掉用户微服务shop-user的resources目录下的application.yml文件中的内容(重要,不要忘记)

至此,就完成了修改用户微服务的配置操作。

2.2.2 商品微服务整合配置中心

修改商品微服务的配置过程与修改用户微服务的配置过程类似,只是部分配置项不同。

(1)在商品微服务shop-product的resources目录下新建bootstrap.yml文件,内容如下所示。

spring:
  application:
    name: server-product
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        group: product_group
  profiles:
    active: dev

(2)在Nacos中的配置信息如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第11张图片
(3)注释掉商品微服务shop-product的resources目录下的application.yml文件中的内容(重要,不要忘记)

2.2.3 订单微服务整合配置中心

修改订单微服务的配置过程与修改用户微服务的配置过程类似,只是部分配置项不同。

(1)在订单微服务shop-order的resources目录下新建bootstrap.yml文件,内容如下所示。

spring:
  application:
    name: server-order
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        group: order_group
  profiles:
    active: dev

(2)在Nacos中的配置信息如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第12张图片
(3)注释掉订单微服务shop-order的resources目录下的application.yml文件中的内容(重要,不要忘记)

2.2.4 网关服务整合配置中心

修改网关服务的配置过程与修改用户微服务的配置过程类似,只是部分配置项不同。

(1)在网关服务shop-gateway的resources目录下新建bootstrap.yml文件,内容如下所示。

spring:
  application:
    name: server-gateway
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        group: gateway_group
  profiles:
    active: dev

(2)在Nacos中的配置信息如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第13张图片(3)注释掉网关服务shop-gateway的resources目录下的application.yml文件中的内容(重要,不要忘记)

2.2.5 查看Nacos中的配置

将用户微服务、商品微服务、订单微服务、网关服务的配置添加到Nacos中后,Nacos中的配置管理-配置列表如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第14张图片

2.3 整合Nacos配置中心测试

(1)分别启动Nacos、Sentinel、ZipKin、RocketMQ的NameServer和Broker。

(2)分别启动用户微服务、商品微服务、订单微服务和网关服务,如果启动成功,基本就说明项目整合Nacos配置中心成功。

(3)启动四个服务后,在浏览器中输入localhost:10001/server-order/order/submit_order?userId=1001&productId=1001&count=1,如下所示。

图片

查看各个微服务中也会打印出相关的日志,如下所示。

  • 用户微服务会打印出如下信息
获取到的用户信息为:{"address":"北京","id":1001,"password":"c26be8aaf53b15054896983b43eb6a65","phone":"13212345678","username":"binghe"}
用户微服务收到了订单信息:{"address":"北京","id":15235872727371776,"phone":"13212345678","totalPrice":2399.00,"userId":1001,"username":"binghe"}
  • 商品微服务会打印出如下信息
获取到的商品信息为:{"id":1001,"proName":"华为","proPrice":2399.00,"proStock":9999}
更新商品库存传递的参数为: 商品id:1001, 购买数量:1 
  • 订单微服务会打印出如下信息
提交订单时传递的参数:{"count":1,"empty":false,"productId":1001,"userId":1001}
库存扣减成功
  • 网关服务会打印出如下信息
执行前置过滤器逻辑
执行后置过滤器逻辑
访问接口主机: localhost
访问接口端口: 10001
访问接口URL: /server-order/order/submit_order
访问接口URL参数: userId=1001&productId=1001&count=1
访问接口时长: 1260ms

说明我们的项目中成功整合了Nacos的配置中心。

3. 服务配置:实现动态刷新与配置共享

3.1 实现动态刷新

之前我们将微服务的配置放入了Nacos,但是此时如果在Nacos中修改了配置,程序是无法读取到修改后的配置的。所以,我们需要实现动态刷新的功能。

「注意:为了描述上的简便,这里,我们就以用户微服务举例说明,其他微服务的实现方式都是一样的。」

3.1.1 修改Nacos配置

在Nacos中修改server-user-dev.yaml的配置,在server-user-dev.yaml配置中新增如下内容。

author:
  name: binghe

如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第15张图片
点击发布后会弹出如下提示。
微服务实战系列之SpringCloud Alibaba学习(六)_第16张图片
直接点击确认发布即可。

3.1.2 通过IOC容器获取Nacos配置

(1)在用户微服务shop-user的io.binghe.shop.user.controller包下新建NacosController类,并在NacosController类中注入org.springframework.context.ConfigurableApplicationContext类,通过ConfigurableApplicationContext获取到系统环境变量,并从环境变量中获取到author.name属性的值,就是我们在Nacos中配置的作者姓名,如下所示。

/**
 * @description 从Nacos中获取配置项
 */
@Slf4j
@RestController
public class NacosController {

    @Autowired
    private ConfigurableApplicationContext context;

    @GetMapping("/nacos/test")
    public String nacosTest(){
        String authorName = context.getEnvironment().getProperty("author.name");
        log.info("获取到的作者姓名为:{}", authorName);
        return authorName;
    }
}

(2)启动用户微服务和网关服务,并在浏览器中输入http://localhost:10001/server-user/user/nacos/test,如下所示。
在这里插入图片描述
可以看到,能够正确读取到Nacos中的配置信息。

(3)修改Nacos中server-user-dev.yaml的配置,将author.name的值修改为binghe001,如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第17张图片点击发布。

(4)发布后,不要重启用户微服务和网关服务,在浏览器上刷新http://localhost:10001/server-user/user/nacos/test链接,发现读取到的信息已经变成了binghe001,如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第18张图片
可以看到,通过IOC容器能够读取到Nacos中修改后的配置。

3.1.2 通过注解获取Nacos配置

(1)在用户微服务shop-user的io.binghe.shop.user.controller.NacosController类上添加@RefreshScope注解,并将Nacos中的author.name的值注入到NacosController类中,并通过接口获取到注入的Nacos中的author.name值,如下所示。

/**
 * @description 从Nacos中获取配置项
 */
@Slf4j
@RefreshScope
@RestController
public class NacosController {

    @Autowired
    private ConfigurableApplicationContext context;

    @Value("${author.name}")
    private String nacosAuthorName;

    @GetMapping("/nacos/test")
    public String nacosTest(){
        String authorName = context.getEnvironment().getProperty("author.name");
        log.info("获取到的作者姓名为:{}", authorName);
        return authorName;
    }

    @GetMapping("/nacos/name")
    public String nacosName(){
        log.info("从Nacos中获取到的作者的姓名为:{}", nacosAuthorName);
        return nacosAuthorName;
    }
}

(2)启动用户微服务和网关服务,并在浏览器中输入http://localhost:10001/server-user/user/nacos/name,如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第19张图片(3)修改Nacos中server-user-dev.yaml的配置,将author.name的值修改为binghe002,如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第20张图片(4)发布后,不要重启用户微服务和网关服务,在浏览器上刷新http://localhost:10001/server-user/user/nacos/name链接,发现读取到的信息已经变成了binghe002,如下所示。

说明使用注解的方式也能够读取到Nacos中更新后的配置信息。

注意:虽然通过IOC容器和注解都能够读取到Nacos中更新后的配置信息,但是在实际项目中,推荐使用注解的方式获取Nacos中更新后的配置信息。

3.2 实现配置共享

一般情况下,开发项目的过程中会包含:开发环境、测试环境、预发布环境和生成环境,每个环境中的配置大部分是相同的,有少部分配置不同,如果我们能够将大部分相同的配置抽取出来,让同一个微服务在不同的环境中共享,则能够大大降低我们的维护成本。

另外,如果使用的是相同的技术栈的话,对于每个微服务来说,可能大部分的配置也是相同的,如果我们将这些相同的配置抽取出来让各个微服务共享,则能够进一步降低维护成本。

所以,实现配置共享可以从 「单服务多环境配置和多服务配置」 两个角度来思考。

3.2.1 单服务多环境实现共享

实现单个微服务在多个不同环境中的配置共享比较简单,只要在Nacos中配置一个以spring.application.name为Data ID的配置文件,并且将这个微服务在所有环境中公共的配置放进去即可。

「注意:这里我们以用户微服务为例进行实现。」

(1)在Nacos中新建一个以server-user.yaml为Data ID的配置,并且将用户微服务在各个环境中共有的配置复制进去,如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第21张图片
其中,我们假设用户微服务在多个环境下公共的配置如下所示。

server:
  port: 8060
  servlet:
    context-path: /user
spring:
  application:
    name: server-user
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/shop?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
    username: root
    password: root
    platform: mysql
    type: com.alibaba.druid.pool.DruidDataSource
    # 下面为连接池的补充设置,应用到上面所有数据源中
    # 初始化大小,最小,最大
    initialSize: 10
    minIdle: 5
    maxActive: 20
    # 配置获取连接等待超时的时间
    maxWait: 60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 3600000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 3600000
    validationQuery: select 1 from dual
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    # 打开PSCache,并且指定每个连接上PSCache的大小
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    maxOpenPreparedStatements: 20
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

  http:
    encoding:
      enabled: true
      charset: UTF-8
      force: true

  mybatis-plus:
    global-config:
      db-config:
        id-type: auto
        field-strategy: not-empty
        table-underline: true
        db-type: oracle
        logic-delete-value: 1
        logic-not-delete-value: 0
    mapper-locations: classpath:/mapper/*.xml
    configuration:
      jdbc-type-for-null: 'null'


rocketmq:
  name-server: 127.0.0.1:9876

点击发布。

(2)将Nacos中用户微服务在开发环境下的配置server-user-dev.yaml修改成如下所示。

author:
  name: binghe_dev

如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第22张图片
点击发布。

(3)在Nacos中添加用户微服务在测试环境下的配置server-user-test.yaml,配置中的主要内容如下所示。

author:
  name: binghe_test

具体如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第23张图片
点击发布。

(4)此时Nacos中的配置如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第24张图片
(5)查看用户微服务中bootstrap.yml文件的配置,如下所示。

spring:
  application:
    name: server-user
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        group: user_group
  profiles:
    active: dev

可以看到,此时bootstrap.yml文件中配置的是环境是dev,表示开发环境。

(6)启动用户微服务和网关服务,在浏览器中输入http://localhost:10001/server-user/user/nacos/name,如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第25张图片
可以看到,正确获取到了Nacos中server-user-dev.yaml配置中的author.name的值。

(7)将用户微服务的bootstrap.yml文件中的环境变量修改成test,如下所示。

spring:
  profiles:
    active: test

(8)重启用户微服务,在浏览器中输入http://localhost:10001/server-user/user/nacos/name,如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第26张图片
可以看到,正确获取到了Nacos中server-user-test.yaml配置中的author.name的值。

综上:我们正确实现了单个微服务在多个不同环境下的公共配置的共享操作。

3.2.2 多服务配置实现共享

不同的微服务之间实现公共的配置共享也比较简单,在Nacos中定义一个公共配置,然后在当前的配置中引入即可。具体的实现步骤如下所示。

(1)在Nacos中新建一个以server-all.yaml为Data ID的配置,配置中的主要内容为用户微服务、商品微服务和订单微服务共有的配置,如下所示。

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/shop?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
    username: root
    password: root
    platform: mysql
    type: com.alibaba.druid.pool.DruidDataSource
    # 下面为连接池的补充设置,应用到上面所有数据源中
    # 初始化大小,最小,最大
    initialSize: 10
    minIdle: 5
    maxActive: 20
    # 配置获取连接等待超时的时间
    maxWait: 60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 3600000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 3600000
    validationQuery: select 1 from dual
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    # 打开PSCache,并且指定每个连接上PSCache的大小
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    maxOpenPreparedStatements: 20
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

  http:
    encoding:
      enabled: true
      charset: UTF-8
      force: true

  mybatis-plus:
    global-config:
      db-config:
        id-type: auto
        field-strategy: not-empty
        table-underline: true
        db-type: oracle
        logic-delete-value: 1
        logic-not-delete-value: 0
    mapper-locations: classpath:/mapper/*.xml
    configuration:
      jdbc-type-for-null: 'null'

具体配置如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第27张图片点击发布,接下来就是在Nacos中修改各个微服务的配置,将各个微服务的配置中公共的配置删除。

(2)在Nacos中修改server-user.yaml的配置,修改后的配置如下所示。

server:
  port: 8060
  servlet:
    context-path: /user
spring:
  application:
    name: server-user
rocketmq:
  name-server: 127.0.0.1:9876

具体如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第28张图片点击发布。

(3)在Nacos中修改server-product-dev.yaml的配置,修改后的配置如下所示。

server:
  port: 8070
  servlet:
    context-path: /product
spring:
  application:
    name: server-product

具体如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第29张图片点击发布。

(4)在Nacos中修改server-order-dev.yaml的配置,修改后的配置如下所示。

server:
  port: 8080
  tomcat:
    max-threads: 20
  servlet:
    context-path: /order
spring:
  application:
    name: server-order

  cloud:
    sentinel:
      transport:
        port: 9999
        dashboard: 127.0.0.1:8888
      web-context-unify: false

feign:
  sentinel:
    enabled: true

rocketmq:
  name-server: 127.0.0.1:9876
  producer:
    group: order-group

具体如下所示。
微服务实战系列之SpringCloud Alibaba学习(六)_第30张图片
点击发布。

(5)修改用户微服务shop-user中的bootstrap.yml文件,修改后的配置如下所示。

spring:
  application:
    name: server-user
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        group: user_group
        shared-configs[0]:
          data_id: server-all.yaml
          group: all_group
          refresh: true

  profiles:
    active: dev

(6)修改商品微服务shop-product中的bootstrap.yml文件,修改后的配置如下所示。

spring:
  application:
    name: server-product
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        group: product_group
        shared-configs[0]:
          data_id: server-all.yaml
          group: all_group
          refresh: true
  profiles:
    active: dev

(7)修改订单微服务shop-order中的bootstrap.yml文件,修改后的配置如下所示。

spring:
  application:
    name: server-order
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        group: order_group
        shared-configs[0]:
          data_id: server-all.yaml
          group: all_group
          refresh: true
  profiles:
    active: dev

(8)分别启动用户微服务,商品微服务,订单微服务和服务网关,在浏览器中输入localhost:10001/server-order/order/submit_order?userId=1001&productId=1001&count=1,如下所示。

在这里插入图片描述

可以看到,浏览器中正确输出了结果信息。

查看各个微服务中也会打印出相关的日志,如下所示。

  • 用户微服务会打印出如下信息
获取到的用户信息为:{"address":"北京","id":1001,"password":"c26be8aaf53b15054896983b43eb6a65","phone":"13212345678","username":"binghe"}
用户微服务收到了订单信息:{"address":"北京","id":15235872727371776,"phone":"13212345678","totalPrice":2399.00,"userId":1001,"username":"binghe"}
  • 商品微服务会打印出如下信息
获取到的商品信息为:{"id":1001,"proName":"华为","proPrice":2399.00,"proStock":9999}
更新商品库存传递的参数为: 商品id:1001, 购买数量:1 
  • 订单微服务会打印出如下信息
提交订单时传递的参数:{"count":1,"empty":false,"productId":1001,"userId":1001}
库存扣减成功
  • 网关服务会打印出如下信息
执行前置过滤器逻辑
执行后置过滤器逻辑
访问接口主机: localhost
访问接口端口: 10001
访问接口URL: /server-order/order/submit_order
访问接口URL参数: userId=1001&productId=1001&count=1
访问接口时长: 863ms

说明我们的项目中成功整合了Nacos的配置中心,并实现了配置的动态刷新和共享。

参考:

本文是参考冰河技术得SpringCloud Alibaba实战专栏内容整理的,只是方便学习使用(侵权删),具体想要了解或想要获取源码的,请参考下面冰河技术的链接,关注公众号获取源码。

SpringCloud Alibaba

冰河技术:《SpringCloud Alibaba实战》

你可能感兴趣的:(SpringCloud,Allibaba,spring,cloud,微服务)