springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)

一、注册中心

注册中心请求原理图:
springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)_第1张图片
说明: 看上图就知道注册中心其实还是依赖于第三者nacos-server来进行各大服务的注册及负载均衡的,那实战中,那肯定是需要在微服务中集成nacos配置,并且启动nacos-server服务。

1、启动nacos-server
本次启动nacos-server采用docker启动,偷点懒哈。
找一下docker镜像: `

docker search nacos-server` 

springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)_第2张图片
下载镜像:

`docker pull nacos/nacos-server`

启动服务:

docker run --name nacos -d -p 8848:8848 --privileged=true -e MODE=standalone -e PREFER_HOST_MODE=hostname -v /home/nacos/logs:/home/nacos/logs  nacos/nacos-server:latest 

在这里插入图片描述
注意: 服务端口记得开,这里就省略。

登录nacos-server管理页面
http://xx.xx.xx.xx:8848/nacos
默认用户账号密码: nacos/nacos
springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)_第3张图片

2、集成nacos
本次在springboot、maven环境下引入nacos的依赖jar
在父模块pom.xml中引入以下:
springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)_第4张图片

<!--定义版本号-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <spring.cloud.alibaba.version>2.2.6.RELEASE</spring.cloud.alibaba.version>
        <spring-boot.version>2.2.6.RELEASE</spring-boot.version>
        <fastjson.version>1.2.58</fastjson.version>
    </properties>

    <!--继承springboot父项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
    </parent>


    <!--在父类Maven中使用dependencyManagement声明依赖便于子类Module继承使用,也便于进行依赖版本控制-->
    <dependencyManagement>
        <dependencies>
            <!--维护springcloud-->
            <!--<dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${
     spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>-->
            <!--维护springcloud alibaba-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${
     spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <version>${
     spring-boot.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

子模块atom-user的pom.xml文件中加入

<dependencies>
        <!--注册中心/配置中心 nacos 引入-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--springboot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.2.6.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!-- 引入log4j2依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>${
     disruptor.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
            <version>${
     log4j-over-slf4j.version}</version>
        </dependency>

        <!--fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${
     fastjson.version}</version>
        </dependency>

        <!--httpclient依赖包-->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>${
     httpclient.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>${
     httpcore.version}</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

在application.yml中加入项目应用名和注册中心地址就可以了

注册服务名:spring.application.name
注册中心地址:spring.cloud.nacos.discovery.server-addr

springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)_第5张图片

server:
  port: 8081
  servlet:
    context-path: /atom-user
  tomcat:
    uri-encoding: UTF-8

spring:
  application:
    name: nacos-provider-atom-user
  jackson:
    time-zone: GMT+8
    date-format:  yyyy-MM-dd HH:mm:ss
    http:
      encoding:
        force: true
        charset: UTF-8
        enabled: true
    #出现错误时, 直接抛出异常
    mvc:
      throw-exception-if-no-handler-found:  true
    resources:
      add-mappings: false
  cloud:
    nacos:
      discovery:
        server-addr: 8.129.236.49:8848

通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:
springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)_第6张图片
启动该服务
springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)_第7张图片
已经成功注册进来了

二、配置中心

说明: 配置中心的原理其实就是把公共配置进行集中缓存处理,集中管理更新等。本次在atom-api服务中引入配置中心。

要使用nacos的配置中心需要引入

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>${
     latest.version}</version>
</dependency>

在 bootstrap.properties 中配置 Nacos server 的地址和应用名

spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.application.name=example

**说明:**之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${
     prefix}-${
     spring.profiles.active}.${
     file-extension}

prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

注意了,接下来有个坑
一定要在bootstrap.yml或bootstrap.properties中添加配置, 不能配置在application.yml中,不然会加载不到配置

原因为:springboot的加载顺序为bootstrap.properties>bootstrap.yml>application.properties>application.yml

springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)_第8张图片

通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新:
springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)_第9张图片

然后再nacos-server后台系统中添加配置:
springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)_第10张图片

springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)_第11张图片

注意:nacos配置中心默认加载的是spring.application.name.properties , 如果需要改变则指定后缀
springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)_第12张图片
启动atom-api服务
springcloud alibaba实战(一)----整合nacos(注册中心、配置中心)_第13张图片
说明配置中心已集成。

你可能感兴趣的:(springcloud,alibaba,docker,spring,boot,maven)