springcloud alibaba企业落地实战:一文带你掌握nacos基础应用

Posted 小黄鸡1992

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springcloud alibaba企业落地实战:一文带你掌握nacos基础应用相关的知识,希望对你有一定的参考价值。

1.为什么使用选择nacos

nacos在springcloud体系中作为注册中心与配置中心使用。相当于eureka与apollo的功能。

一个老生常谈的问题nacos和eureka区别,下图是楼主在网上查找到。

但是在楼主实际应用中 还有以下有点特别称道:

  1. nacos有配置功能,相对于楼主之前的eureka+apollo 这无疑大大的简化了系统的复杂性。
  2. nacos使用了数据库进行管理数据,使在处理数据时心里更舒服了。
  3. nacos拥有namespace和gourp的概念,可以隔离同名的服务。这样在多人起后端服务时,可以注册到一个nacos服务 隔离开就可以了。

2.Nacos快速开始

这个快速开始手册是帮忙您快速在您的电脑上,下载、安装并使用 Nacos。

1.版本选择

您可以在Nacos的release notes博客中找到每个版本支持的功能的介绍,当前推荐的稳定版本为1.4.2或2.0.1。

2.预备环境准备

Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:

  1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  2. 64 bit JDK 1.8+;下载 & 配置
  3. Maven 3.2.x+;下载 & 配置

3.下载源码或者安装包

你可以通过源码和发行包两种方式来获取 Nacos。

1.从 Github 上下载源码方式

git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
ls -al distribution/target/

// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin

2.下载编译后压缩包方式

您可以从 最新稳定版本 下载 nacos-server-$version.zip 包。

  unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
  cd nacos/bin

4.启动服务器

1.Linux/Unix/Mac

启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

bash startup.sh -m standalone

2.Windows

启动命令(standalone代表着单机模式运行,非集群模式):

startup.cmd -m standalone

当idea使用源码单机启动时需要以下配置

-Dnacos.standalone=true

5.单机时使用数据库

当不添加配置时,默认是使用内存保存信息,我们可以添加数据库配置,使数据保存在数据库内.

暂时官方只支持mysql,其他数据库需要自己手动修改。

1.源码启动

使用源码idea启动需要修改以下文件的以下位置

2.已经打包的jar包

nacos\\conf\\application.properties修改数据库配置

6.启动成功

出现以下图案代表启动成功,看出来模式为单机模式,路径为Console输出,访问即可

对于官网集群搭建的要求,是要求大企业的,个人认为小公司如果没有条件可以不必满足,也可以正常启动。但是有条件还是建议上集群。

3.springboot注册进入nacos

1.修改pom文件

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- SpringCloud Alibaba Nacos Config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

在pom.xml文件中最好选择合理的版本,否则会报各种各样的错 。

版本可以根据官方文档选择:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

同时为了保证版本相同建议再父工程中加入以下配置,意思是子工程groupid为org.springframework.cloud,com.alibaba.cloud,org.springframework.boot的都依赖父工程版本

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <!--maven不支持多继承,使用import来依赖管理配置-->
                <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>
            <!-- SpringBoot 依赖配置 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

2.修改bootstrap.xml

这里一定要使用bootstrap.yml而不是application.yml,因为bootstrap.yml运行先于后者,如果使用application.yml可能会出现即使有注册的地址,还是去连接localhost:8848的情况。

spring:
  application:
    name: systemp
    # 数据源配置
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 192.168.xx.x:8848
        #命名空间
        namespace: b80f0aa4-3af2-a6e3-c6fda24c2bc0
        #分组
        group: xxx
      config:
        # 配置中心地址
        server-addr: 192.168.xx.xx:8848
        # 配置文件格式
        file-extension: yml
        #命名空间
        namespace: b80f0aa4-3af2-a6e3-c6fda24c2bc0
        #分组
        group: xxx

可以为服务指定namespace和group,在一个namespace和group中的服务只能获取同namespace和group中的服务,这样可以同时配置dev和pro环境。获取小组内的小伙伴都可以连接一个nacos服务,而不是像eureka 一人启动一个。

1.新建命名空间

配置文件中namespace是需要建立的,方式如图。

配置文件中是命名空间id

2.新建分组

分组不用在nacos中新建 ,直接编写即可。

3.修改启动类

在spring boot启动类上加入@EnableDiscoveryClient注解即可。

@EnableDiscoveryClient
@SpringBootApplication
public class GetwayApplication {

    public static void main(String[] args) {
        //去除nacos日志
        System.setProperty("nacos.logging.default.config.enabled", "false");
        SpringApplication.run(GetwayApplication.class, args);
    }

}

注意:如果使用了logback作为日志System.setProperty("nacos.logging.default.config.enabled", "false"); 需要添加 否则会因为日志命名报错

4.启动

然后启动服务,访问ip:8848/nacos可以验证是否注册成功。

同时也发布到了指定的namespace和groupid。

4.配置中心

配置中心:bootstrap.yml中的配置可以通过nacos配置修改,同时大部门不需要重启服务就可以生效。

由于引入了nacos,楼主不再使用apollo配置中心。变更原因如下

  1. 由于架构变更为springcloud alibaba,nacos可以承担起eureka+apollo的功能。
  2. 可以降低系统的复杂性。方便运维。
  3. 对配置中心的需求仅有动态配置,无更细腻话的权限和灰度发布等功能要求。

1.实战整合springboot

建议启动类使用bootstrap.yml

1.新建nacos配置

请注意选择合适命名空间

配置解释如下:

  1. Data ID的命名格式如下:{spring.application.name}-{spring.profiles.active}.{文件类型},也就是系统名称+dev/pro.yaml(一般情况)见下图。

如果没有spring.profiles.active会省略“-”与“spring.profiles.active”

  1. group:其中需要注意namespace与group需要与nacos中配置对应(这两个概念上文有介绍),否则会获取不到配置。

  2. 配置格式:这里因为使用了bootstrap.yml所以选择上述配置。

  3. 配置内容:需要在nacos中更改的配置项。

2.配置成功

如果成功:

切记namespace与group一定要匹配。

同时可以监控到那台服务使用该配置。

3.客户端接口编写

@RestController
@RefreshScope
public class DemoController {  

    @Value("${nacostest.demo}")
    private String demo;

    @GetMapping("/testConfig")
    public String testConfig()  {
        return demo;
    }
}

@RefreshScope不要少写!否则报错!
改变配置多次调用接口,可以发现返回值发生变化。

以上是关于springcloud alibaba企业落地实战:一文带你掌握nacos基础应用的主要内容,如果未能解决你的问题,请参考以下文章

springcloud alibaba企业落地实战:一文带你掌握nacos基础应用

springcloud alibaba企业落地实战:小企业适用的组件化的服务间的调用

springcloud alibaba企业落地实战:小企业适用的组件化的服务间的调用

17.SpringCloud实战项目-SpringCloud整合Alibaba-Nacos组件

SpringCloud alibaba实战系列文章说明

深入浅出Dubbo3原理及实战「SpringCloud-Alibaba系列」基于Nacos作为注册中心进行发布SpringCloud-alibaba生态的RPC接口实战