SpringCouldAlibaba-Nacos(一):环境搭建

本文详细介绍了如何搭建Nacos服务端,包括在Linux和Windows上的启动步骤,并强调了需要开放的端口。接着,展示了Nacos作为服务注册与发现的配置,以及如何在Spring Cloud应用中集成Nacos实现服务的注册。此外,还讲解了Nacos的数据持久化到MySQL,以及配置集群的方法。最后,介绍了如何使用Nacos作为配置中心,包括配置数据ID的命名规则和环境隔离的配置方式。
摘要由CSDN通过智能技术生成

搭建nacos服务端

下载nacos

     Linux解压 tar -xvf nacos-server-2.0.3.tar.gz 

      进入bin目录   cd nacos/bin

      单机启动:   sh startup.sh -m standalone

        查看 logs下start.out 启动日志

启动成功后访问地址:Nacos

默认用户密码:nacos/nacos

      注意

        需要开放 8848  9848  9849三个端口 。Nacos2.0增加了9848,9849端口来进行GRPC通信

Nacos 的服务注册和发现

  1. 新建父工程 依赖如下:
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.8</version>
    </parent>

    <!-- 配置管理,主要是控制xml文件中的一些常量配置,比如版本号,maven版本 jdk版本 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <java.version>1.8</java.version>
        <!-- Spring Cloud 2020.0.4 依赖 -->
        <spring-cloud.version>2020.0.5</spring-cloud.version>
        <!-- spring cloud alibaba 依赖 -->
        <spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <!--
       在父工程中定义的dependencies的依赖,只要是它的子模块,都自动继承下去
       所以:这里的而依赖必须是非常通用的依赖,否则不要随意添加.
     -->
    <dependencies>
        <!-- lombok 工具通过在代码编译时期动态的将注解替换为具体的代码,
        IDEA 需要添加 lombok 插件 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--最新的alibabacloud在加载bootstrap.yml文件的会报错-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
    </dependencies>

    <!--
        项目依赖管理 父项目只是声明依赖,父工程不会去下载,只是管理
        目的:是让子类在依赖的时候自动去下载的。
        一句话:让子类达到一种按需选中依赖的一种机制
        好处就是:不需要指定版本号。
    -->
    <dependencyManagement>
        <dependencies>
            <!-- spring cloud 依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- spring cloud 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>
        </dependencies>
    </dependencyManagement>

    2.新建一个用户服务依赖如下

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--最新的alibabacloud在加载bootstrap.yml文件的会报错-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
    </dependencies>

     3.配置

        为了保证项目启动的时候,配置先从nacos配置中心拉取,所有基础配置要写在 bootstrap.yml / bootstrap.properties文件中。bootstrap.yml比application.yml文件的优先级 更高如下:

server:
  port: 8011

spring:
  application:
    name: xq_pug_user_server
  cloud:
    nacos:
      discovery:
        # 服务的注册与发现 默认是true
        enabled: true
        server-addr: 120.76.41.215:8848

# 暴露监控断点,给后续的Admin进行监控处理
# 获取单独访问http://localhost:8011/actuator
management:
  endpoints:
    web:
      exposure:
        include: '*'

    启动类

package com.xq.pug;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class UserServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserServerApplication.class);
    }

}

    4.启动用户服务,查看nacos服务端 用户服务已注册到nacos中

nacos数据持久化

把配置信息持久化到MYSQL数据库中

目的:安全,备份,和防止丢失

作用:可以为nacos集群高可用提供数据共享。

1.在nacos\conf下面找到 nacos-mysql.sql ,在数据库中新建nacos-config数据库 进行导入即可

 

2:在nacos\conf下面找到 application.properties ,进行数据库配置即可如下:

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=zmq99807

 3.重启nacos服务

 sh shutdown.sh 
 sh startup.sh -m standalone

4. 访问nacos管理端 测试新加一个配置,同步到数据库中 表示配置持久化成功 

 

配置集群

单机版部署集群通过端口隔离

 

1.在每个nacos/conf目录下新建一个cluster.conf文件 交叉配置ip端口。如下

 

 2.使用集群方式启动各个nacos节点

 sh startup.sh

3.查看集群状态

 

Spring Cloud AlibabaNacos 的配置中心

1.在nacos管理端 打开配置管理在pulic下新建一个配置。此处的作用就是:把你想要的项目的配置信息放入到这个列表中进行配置管理。管理的过程你可以给你的配置项添加组,也可以去指定你格式。

 2.填完配置内容后点击发布即可

 

Dataid的命名 - 默认规则(没有环境隔离的情况下)

Dataid主要是使用当前项目快速切换多套配置内容,先来看下Dataid的组成部分,以便更容易理解如下:

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认是:spring.application.name的值

  • 注意1:我们可以通过:spring.cloud.nacos.config.prefix配置来覆盖默认规则。但是不建议了

  • 注意2:当spring.profiles.active为空时,对应的连接符也将不存在,dataId的格式化就会变成

    ${prefix}.${file-extension}
  • 我们可以通过:spring.cloud.nacos.config.file-extension配置项来配置。

服务中读取配置中心配置

1.依赖

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

2.配置

spring:
  application:
    name: xq_pug_user_server
  cloud:
    nacos:
      discovery:
        # 服务的注册与发现 默认是true
        enabled: true
        server-addr: 120.76.41.215:8848
      config:
        # 单机版本
        server-addr: 120.76.41.215:8848
        # 命名空间 默认是public,不用指定
        #namespace: 
        # 如果你要修改,可以自己去指定dataid的名字
        prefix: ${spring.application.name}
        file-extension: yaml
        # group 默认:DEFAULT_GROUP
        group: DEFAULT_GROUP

3.使用

      在使用配置信息的类上增加@RefreshScope注解可以实现实时刷新配置内容

package com.xq.pug.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
//声明@RefreshScope注解 这个类中使用nacos配置中心的配置可以实时刷新
@RefreshScope
public class UserController {

    @Value("${user.name}")
    private String userName;

    @GetMapping("/getUserName")
    public String getUserName(){
        log.info(userName);
        return userName;
    }

}

测试接口发现读取配置成功

此时不重启服务,修改配置中心配置,测试服务内是否实时更新配置信息内容

 dataid命名 — 环境隔离的方式 - spring.profiles.activve

1.新建dev和prod配置文件

2. 配置

spring:
  application:
    name: xq_pug_user_server
  cloud:
    nacos:
      discovery:
        # 服务的注册与发现 默认是true
        enabled: true
        server-addr: 120.76.41.215:8848
      config:
        # 单机版本
        server-addr: 120.76.41.215:8848
        # 命名空间 默认是public,不用指定
        #namespace:
        # 如果你要修改,可以自己去指定dataid的名字
        prefix: ${spring.application.name}
        file-extension: yaml
        # group 默认:DEFAULT_GROUP
        group: DEFAULT_GROUP
#  配置环境隔离
  profiles:
    active: prod

关于namespace、group和dataid的关系

namespace、group和dataid在前面都已经操作过了。其设计思想是:“分门别类”。namespace代表最粗的粒度划分,group是第二分类,dataid是最小的分类。

比如现在又很多的微服务,需要区分不同的企业团队的开发。就可以创建namespace来进行区分。比如这个企业团队开发的用户服务,比如用户注册,用户登录,可以划分到用户group 里。最后就是具体选择那个配置内容就是dataid啦。

不论是nacos的服务发现还是配置中心:只要做了隔离都需要进行配置和区分,否则找不到服务或者配置。

默认的命名空间

是public,在程序不需要指定。因为指定命名是通过命名空间ID 。所有如果是服务注册还是配置中心,如果是默认都不需要指定,也在namespace=publci下面去做分组的dataid.

增加命名空间

 

 服务注册和配置中心都使用自定义的命名空间

 配置中心

 服务中心

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值