Spring Cloud alibaba Nacos

# Spring Cloud alibaba Nacos

1.Spring Cloud alibaba

地址:https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/README-zh.md

引入依赖:

<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>

image-20220212152535459

2.Spring Cloud alibaba Nacos 注册中心

地址:https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme-zh.md

(1)下载Nacos Server

地址:https://github.com/alibaba/nacos/releases

image-20220212171850357

image-20220212173819748

(2)解压运行

默认是cluster,可以改成standalone,或者如下命令行运行,image-20220212225142450

单机运行

startup.cmd -m standalone

image-20220212212319512

(3)访问:http://127.0.0.1:8848/nacos/index.html#/login

用户名密码都是nacos

image-20220212212410875

(4)gulimall-common的pom.xml导入依赖:

 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 </dependency>
 
 /*
 //如果出现loadbalancer相关错误,在nacos"包中移除ribbion依赖,并加入loadbalancer依赖"
         <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <!--不使用Ribbon 进行客户端负载均衡-->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
 */

(5)gulimall-member的application.yml增加nacos配置

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

image-20220212225347385

(6)gulimall-member使用 @EnableDiscoveryClient 注解开启服务注册与发现功能

@EnableDiscoveryClient

image-20220212225451384

(7)gulimall-coupon的application.yml增加nacos配置

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

image-20220212225610615

(8)gulimall-coupon使用 @EnableDiscoveryClient 注解开启服务注册与发现功能

@EnableDiscoveryClient

image-20220212225636440

(9)运行GulimallCouponApplication 和GulimallMemberApplication

image-20220212225745870

(10)登录nacos查看,服务已经注册进来

image-20220212225824470

3.Spring Cloud alibaba Naloas 配置中心

地址:https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md

(1)导入依赖

<!--nacos配置中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

image-20220212235406430
(2)增加bootstrap.properties配置,这个文件是springboot里规定的,他优先级别application.properties高

# 改名字,对应nacos里的配置文件名
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

image-20220213000006368

(3)增加application.properties配置

coupon.user.name = application.properties
coupon.user.age = 18

image-20220213000042792

(4)CouponController增加测试代码

//从application.properties中获取//不要写user.name,他是环境里的变量
@Value("${coupon.user.name}")
private String name;
@Value("${coupon.user.age}")
private Integer age;
@RequestMapping("/test")
public R test(){

    return R.ok().put("name",name).put("age",age);
}

image-20220213000154849

(5)测试:http://localhost:7005/coupon/coupon/test

这里就可以访问本地application.properties的配置文件

image-20220213000241323

(6)nacos增加配置并发布

image-20220213000435745

4.Spring Cloud alibaba Nacos 配置中心-命名空间与配置分组

4.1 命名空间

nacos新增命名空间

image-20220213141406088

prop配置

coupon.user.name = nacos.prop
coupon.user.age = 30

image-20220213141430932

image-20220213141253434

# 可以选择对应的命名空间 # 写上对应环境的命名空间ID
spring.cloud.nacos.config.namespace=d408db52-7aa9-4348-81b4-cc5d39f91c55

image-20220213141122995

测试访问:http://localhost:7005/coupon/coupon/test

image-20220213141201571

  • 命名空间:用作配置隔离。(一般每个微服务一个命名空间)

    • 默认public。默认新增的配置都在public空间下

    • 开发、测试、开发可以用命名空间分割。properties每个空间有一份。也可以为每个微服务配置一个命名空间,微服务互相隔离

    • 在bootstrap.properties里配置

      spring.cloud.nacos.config.namespace=d408db52-7aa9-4348-81b4-cc5d39f91c55
      

      image-20220213140628230

  • 配置集:一组相关或不相关配置项的集合。

  • 配置集ID:类似于配置文件名,即Data ID

  • 配置分组:默认所有的配置集都属于DEFAULT_GROUP。双十一,618的优惠策略改分组即可

    spring.cloud.nacos.config.group=DEFAULT_GROUP
    

4.2 配置分组

(1)为coupon新增一个命名空间

image-20220213141658701

(2)gulimall-coupon只读取自己的配置(基于微服务隔离)

image-20220213142124267

(3)可以设置不同的分组

coupon.user.name = coupon.11

coupon.user.age = 60

image-20220213142734839

image-20220213142628274

(4)测试:http://localhost:7005/coupon/coupon/test

image-20220213142706963

(5)新增dev(开发环境)和prod(生产环境)分组,默认为dev分组

dev配置:

coupon.user.name = coupon.dev
coupon.user.age = 50

prod配置:

coupon.user.name = coupon.prod
coupon.user.age = 70

image-20220213143207865

测试访问:http://localhost:7005/coupon/coupon/test

image-20220213143406444

5.Spring Cloud alibaba Nacos 配置中心-加载多配制集

(1)注释application.yml

image-20220213150728605

(2)nacos新增配置

datasource.yml

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.56.10:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
  profiles:
    active: dev

mybatis.yml

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto
      logic-delete-value: 1
      logic-not-delete-value: 0

other.yml

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

server:
  port: 7005

image-20220213150320322

(3)修改bootstrap.properties

# 改名字,对应nacos里的配置文件名

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

# 可以选择对应的命名空间 # 写上对应环境的命名空间ID
spring.cloud.nacos.config.namespace=8531791b-f632-4588-a406-090f42c04d48

# 分组 默认DEFAULT_GROUP
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

image-20220213150507873

(4)测试运行,nacos配置读取正常

访问:http://localhost:7005/coupon/coupon/test

image-20220213150624589

访问:http://localhost:7005/coupon/coupon/list

image-20220213150644134

6.注意:com.alibaba.cloud版本和nacos版本问题

com.alibaba.cloud是2.2.7.RELEASE版本,nacos如果是1.多版本就会注册不进去,服务起不来

image-20220212230057326

7.出现loadbalancer相关的错误

在nacos"包中移除ribbion依赖,并加入loadbalancer依赖"

image-20220212234532098

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <!--不使用Ribbon 进行客户端负载均衡-->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </exclusion>
    </exclusions>
</dependency>

在需要远程调用的服务加上loadbalancer

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

image-20220212235039315

8.不识别bootstrap.properties的错误

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
posted @ 2022-04-10 22:48  peng_boke  阅读(87)  评论(0)    收藏  举报