Spring Cloud Alibaba Nacos集成

Posted java_wxid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud Alibaba Nacos集成相关的知识,希望对你有一定的参考价值。

主项目链接:https://gitee.com/java_wxid/java_wxid
项目架构及博文总结:

项目模块:
前期规划,实现部分

java_wxid   
├── demo        // 演示模块
│     └── 模块名称:spring-boot-demo模块                   //Spring Boot快速构建应用(已实现并有博文总结)
│     └── 模块名称:spring-cloud-alibaba-nacos-demo模块    //Spring Cloud Alibaba Nacos集成(已实现并有博文总结)
│     └── 模块名称:spring-cloud-open-feign-demo模块       //Spring Cloud Open Feign集成(已实现并有博文总结)
│     └── 模块名称:spring-cloud-hystrix-demo模块          //Spring Cloud Hystrix集成(已实现并有博文总结)
│     └── 模块名称:spring-cloud-ribbon-demo模块           //Spring Cloud Ribbon集成(已实现并有博文总结)
│     └── 模块名称:spring-cloud-gateway-demo模块          //Spring Cloud Gateway集成(已实现并有博文总结)
│     └── 模块名称:spring-cloud-security-oauth2-demo模块  //Spring Cloud Security Oauth2集成(已实现并有博文总结)
│     └── 模块名称:spring-cloud-stream-demo模块           //Spring Cloud Stream集成(框架已搭建,待校验,待博文总结)
│     └── 模块名称:spring-cloud-skywalking-demo模块       //Spring Cloud Skywalking集成(框架已搭建,待校验,待博文总结)
│     └── 模块名称:spring-cloud-alibaba-seata-demo模块    //Spring Cloud Alibaba Seata集成(已实现并有博文总结)
│     └── 模块名称:spring-cloud-alibaba-sentinel-demo模块 //Spring Cloud Alibaba Sentinel集成(框架已搭建,待校验,待博文总结)
│     └── 模块名称:apache-shardingsphere-demo模块         //Apache ShardingSphere集成(已实现并有博文总结)
│     └── 模块名称:apache-mybatis-demo模块                //Apache Mybatis集成(已实现并有博文总结)
│     └── 模块名称:redis-demo模块                         //Redis集成(已实现并有博文总结)
│     └── 模块名称:elasticsearch-demo模块                 //ElasticSearch集成(框架已搭建,待校验,待博文总结)
│     └── 模块名称:mongodb-demo模块                       //MongoDB集成(已实现并有博文总结)
│     └── 模块名称:xxl-job-demo模块                       //xxl-job集成(框架已搭建,待校验,待博文总结)
│     └── 模块名称:apache-spark-demo模块                  //Apache Spark集成
│     └── 模块名称:etl-hdfs-hive-hbase-demo模块           //ETL、HDFS、Hive、Hbase集成
│     └── 模块名称:ddd-design-mode-demo模块               //DDD、设计模式集成
│     └── 模块名称:netty-demo模块                         //Netty集成
│     └── 模块名称:vue-demo模块                           //前端vue集成
├── document        // 文档
│     └── README.ch.md                      //中文文档
│     └── README.en.md                      //英文文档

系列文章:前期主要以demo项目为主,快速集成各种微服务相关的技术,帮助大家可以快速集成到自己的项目中,节约开发时间。后期则会以企业实战项目为主,致力于解决高并发、高可用、高性能、高可靠、海量数据等疑难问题,同时记录工作中遇到的技术难点、有技术亮点,项目会结合博客、视频辅助讲解,帮助大家查询是否遇到过同类型的问题。
提示:系列文章还未全部完成,后续的文章,会慢慢补充进去的。

文章目录


集成nacos需要先准备好nacos,这里从零开始搭建,首先准备好一台云服务器,我这里选择的是阿里云的CentOS 7.2 64位,然后开放安全组的指定端口,然后使用宝塔面板快速安装mysql,docker,使用docker容器快速安装nacos,最后创建项目进行测试nacos动态更新配置是否成功。

代码地址:https://gitee.com/java_wxid/java_wxid/tree/master/demo/spring-cloud-alibaba-nacos-demo

安装宝塔面板

去宝塔面板填写服务器ip和登录密码
如下(示例):

宝塔面板地址:https://www.bt.cn/new/download.html

选择仅安装宝塔面板,安装好之后会有一个链接和账户

面板地址:http://ip:端口/xxxxxx
用户名:xxxxx
密码:xxxxx

然后绑定手机号

安装mysql

由于nacos需要用到数据库,这里我需要提前安装好mysql,软件商店选择安装mysql

安全左侧栏目开放端口(一般需要修改默认端口,这里做演示就不改了)
如下(示例):

如果需要在宝塔面板里面链接mysql执行sql需要安装phpMyAdmin
如下(示例):

但是安装phpMyAdmin前还需要安装nginx和php-7.1|php-7.2|php-7.3|php-7.1|php-7.4|php-8.0|php-8.1|,安装完成之后就可以测试连接了
如下(示例):

如果root账号远程是报错,进入宝塔安装的phpmyadmin数据库界面,执行以下命令,重启mysql.
代码如下(示例):

#方法一:直接给root授予最大权限
# 授权root用户对所有数据库在任何ip都可以进行操作
grant all on *.* to root@'%' identified by '123456' with grant option;
# 刷新数据库
flush privileges;
 
#方法二:新建一个用户并授予最大权限
# 新建并授权jim用户对所有数据库在任何ip都可以进行操作
grant all on *.* to liaozhiwei@'%' identified by '123456' with grant option;
# 刷新数据库
flush privileges;

“root、liaozhiwei”是用户账号名;“123456”是mysql连接密码;“all”是指全部权限;“%指的是任何ip”,也可以把%替换成对应远程的ip地址

如果还是连接报错需要检查云服务器安全组端口是不是没开放

安装redis(非必选)

安装配置nacos和redis没有关系,这里为了后面项目可以用到redis,提前做好了安装配置,在软件商店搜索redis,点击安装,并且在首页显示方便修改配置
如下(示例):
去首页点击redis
如下(示例):
如下(示例):


然后重载配置,重启redis

检查云服务器安全组端口是否开发,就可以测试连接了
如下(示例):

安装docker

可以在左侧的Docker栏目安装docker
如下(示例):

安装nacos

代码如下(示例):

#搜索可以使用的镜像
docker search nacos

#拉取镜像
docker pull nacos/nacos-server

#推荐使用这种方式,可以连接自己的数据库
docker run --restart always -d -p 8848:8848 -p 9848:9848 -p 9849:9849 \\
--name nacos \\
--env MODE=standalone \\
--env SPRING_DATASOURCE_PLATFORM=mysql \\
--env MYSQL_SERVICE_HOST=106.14.132.94 \\
--env MYSQL_SERVICE_PORT=3306 \\
--env MYSQL_SERVICE_DB_NAME=nacos \\
--env MYSQL_SERVICE_USER=root \\
--env MYSQL_SERVICE_PASSWORD=JHWLXeT56iJiBwDG \\
nacos/nacos-server:latest

在数据库里面创建nacos库,把sql导入,sql地址:https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql

访问地址 默认账号密码是nacos/nacos(一般会删除,重新创建新用户)

http://ip:8848/nacos

配置nacos

创建命名空间

如下(示例):

创建配置文件nacos-config-dev.yaml

如下(示例):
填写内容:
内容如下(示例):

user:
    name: liaozhiwei
    age: 25

如下(示例):

创建spring-cloud-alibaba-nacos-demo项目

项目代码:https://gitee.com/java_wxid/java_wxid/tree/master/demo/spring-cloud-alibaba-nacos-demo
项目结构如下(示例):

创建一个springboot的项目,然后修改pom.xml

代码如下(示例):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>spring-cloud-alibaba-nacos-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-alibaba-nacos-demo</name>
    <description>Demo project for Spring Boot</description>

    <!--    属性配置-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <!--引入 Spring BootSpring CloudSpring Cloud Alibaba 三者 BOM 文件,进行依赖版本的管理,防止不兼容。
        在 https://dwz.cn/mcLIfNKt 文章中,Spring Cloud Alibaba 开发团队推荐了三者的依赖关系-->
        <spring.boot.version>2.3.12.RELEASE</spring.boot.version>
        <spring.cloud.version>Hoxton.SR12</spring.cloud.version>
        <spring.cloud.alibaba.version>2.2.7.RELEASE</spring.cloud.alibaba.version>
    </properties>

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

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

        <!--        代表web模块,在这个模块中含了许多JAR包,有spring相关的jar,内置tomcat服务器,jackson等,这些web项目中常用的的功能都会自动引入-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Alibaba Nacos 配置 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
<!--SpringBoot 2.4.x的版本之后,对于bootstrap.properties/bootstrap.yaml配置文件
(我们合起来成为Bootstrap配置文件)的支持,其实这个jar包里什么都没有,就只有一个标识类Marker,
用来标识要开启Bootstrap配置文件的支持,由于父类用了2.5.6版本需要导入如下的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>


    <!--
        引入 Spring BootSpring CloudSpring Cloud Alibaba 三者 BOM 文件,进行依赖版本的管理,防止不兼容。
        在 https://dwz.cn/mcLIfNKt 文章中,Spring Cloud Alibaba 开发团队推荐了三者的依赖关系
     -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>$spring.boot.version</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>$spring.cloud.version</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <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>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <source>$java.version</source>
                    <target>$java.version</target>
                    <encoding>$project.build.sourceEncoding</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

创建bootstrap.yml文件

代码如下(示例):

#bootstrap.yml优先级比application.yml优先级高
spring:
  #prefix−spring.profile.active.$file-extension
  #nacos会根据当前环境去拼接配置名称查找相应配置文件,
  #示例:spring.application.name-spring.profiles.active-spring.cloud.nacos.config.file-extension
  #获取到值:nacos-autoconfig-service-dev.yml
  profiles:
    #开发环境dev,测试环境test,生产环境prod
    active: dev
  application:
    #配置应用的名称,用于获取配置
    name: nacos-config
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: ip:8848
      config:
        #nacos配置中心地址
        server-addr: ip:8848
        #配置中心的命名空间id
        namespace: 9e50b6d9-6c3d-4e7a-b701-10f085e4b98d
        #配置分组,默认没有也可以
        group: DEFAULT_GROUP
        #配置文件后缀,用于拼接配置配置文件名称,目前只支持yaml和properties
        file-extension: yaml
        #配置自动刷新
        refresh-enabled: true
        #配置文件的前缀,默认是application.name的值,如果配了prefix,就取prefix的值
        #prefix: nacos-autoconfig-service-$spring.profile.active
        # 配置编码
        encode: UTF-8
        username: nacos
        password: nacos

修改启动类SpringCloudAlibabaNacosDemoApplication

代码如下(示例):

package com.example.springcloudalibabanacosdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.ConfigurableApplicationContext;
import java.util.concurrent.TimeUnit;

@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudAlibabaNacosDemoApplication 

    public static void main(String[] args) throws InterruptedException
        ConfigurableApplicationContext applicationContext = 
        SpringApplication.run(SpringCloudAlibabaNacosDemoApplication.class, args);
        //配置的动态更新
        while(true) 
            //当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
            String userName = applicationContext.getEnvironment().getProperty("user.name");
            String userAge = applicationContext.getEnvironment().getProperty("user.age");
            System.err.println("user name :" + userName + "; age: " + userAge);
            TimeUnit.SECONDS.sleep(1);
        
    


启动项目开始校验

控制台打印如下(示例):

修改nacos中的配置查看是否动态更新
配置修改如下(示例):

控制台打印发现已经修改成功了
控制台打印如下(示例):

以上是关于Spring Cloud Alibaba Nacos集成的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud - Spring Cloud Alibaba 之 Nacos Config配置中心

Nacos Config 配置中心攻略和详解

spring cloud 微服务无法注册到nacos

springcloud~gateway网关

springcloud复习3

配置中心(Nacos)