SpringCloud - Nacos 服务注册中心

Nacos从入门到避坑

1.学习借鉴

  1.1  整理nacos知识点,让你吃透 Nacos

  1.2  Nacos使用入门

       1.3 nacos介绍及使用

  1.4 什么是Nacos?Nacos注册配置中心介绍

  1.5  Ribbon和OpenFeign  openFeign/ restTemplate+ribbon

   1.6 Ribbon与OpenFeign

 

 2.Nacos简介

  2.1 为什么叫Nacos

    前四个字母分别为name和config的前两个字母,最后的sService

  2.2 主要功能 配置中心 + 注册中心

 

3.docker 安装 nacos 

  3.1 Alibaba  2.2.0.RELEASE 版本对应的 nacos 1.1.4

    docker pull nacos/nacos-server:1.1.4

  3.2 执行命令

 # 创建文件夹

   mkdir -p /usr/local/nacos/logs/
   mkdir -p /usr/local/nacos/init.d/

 # 运行nacos
docker run --name nacos1.1.4 -d -p 8848:8848 --privileged=true --restart=always -e JVM_XMS=256m -e JVM_XMX=256m -e MODE=standalone -e PREFER_HOST_MODE=hostname -v /usr/local/nacos/logs:/home/nacos/logs -v /usr/local/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties nacos/nacos-server:1.1.4 
-v /usr/local/nacos/conf:/home/nacos/conf 

      --name 容器名称  ;-p 宿主主机端口:容器端口 映射;  -e 环境变量配置; -v 路径映射  ;–restart 重启策略

  注意::需要经conf文件映射到宿主机 ,后边mysql持久化需要用到sql脚本,application。properties  (挂载conf 路径nacos起不来)

  3.3 初始密码 nacos/nacos

    http://IP:8848/nacos/index.html

 

  3.3 创建mysql 并持久化nacos的配置信息  持久化没有启动成功!存在问题

    # mysql新建nacos的数据库,并执行脚本 sql脚本地址如下:

      https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/nacos-db.sql

    # 修改配置文件

       vim /usr/local/nacos/init.d/custom.properties 

server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
 
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://ip:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=tsbx8888
 
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
nacos.naming.distro.taskDispatchThreadCount=1
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.naming.expireInstance=true

        # docker cp 复制:

      docker cp 8b9d:/home/nacos/init.d/custom.properties /usr/local/nacos/init.d/custom.properties 

    # 重启容器

    dockers restart 容器id

 

4.服务注册到 nacos

  4.1 父工程引入依赖并指定版本;子模版引入依赖不需要指定版本

<!--spring cloud alibaba 2.1.0.RELEASE-->

<dependency>

  <groupId>com.alibaba.cloud</groupId>

  <artifactId>spring-cloud-alibaba-dependencies</artifactId>

  <version>2.1.0.RELEASE</version>

  <type>pom</type>

  <scope>import</scope>

</dependency>

 

  4.2 子模块引入依赖

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

  4.3 yml文件

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址

  4.4 主启动类添加注解 @EnableDiscoveryClient

@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain9001.class,args);
    }
}

  4.4 通过idea 工具 参照8001 新建8002 直接拷贝虚拟端口映射

    2021 idea 设置多启动类管理 (2019版 的 Run Dashboard)  add -- springboot

如   

-DServer.port=8002

 

 

 

 

   4.5 为什么nacos 支持负载均衡

 

 

 

5.服务之间的调用 

  1. RestTemplate  服务接口调用 

    +Ribbon实现负载均衡

 

  2.OpenFeign服务接口调用

    - openFeign 内置了 ribbon 实现负载均衡

    -  Nacos 内置了 ribbon可以实现负载均衡 

    - Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用。

 

6.引入 spring-cloud-starter-alibaba-nacos-discovery 警告

   No URLs will be polled as dynamic configuration sources.

  产生原因:分析可知道由于Nacos/openFeign包内Ribben引入了netflix-archaius包,默认需要加载配置源,无法加载配置元导致系统警告。  netflix-archaius与spring-config和apollo等配置组建类似。

    openFeign、Nacos 都内置了Ribben ;

 

   解决方案:1. maven依赖中 排除netflix-archaius引入

  

  <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>spring-cloud-netflix-archaius</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>spring-cloud-netflix-archaius</artifactId>
                    <groupId>org.springframework.cloud</groupId>
                </exclusion>
            </exclusions>
        </dependency>

  方案2:

    在resources目录下创建一个空的config.properties文件。

 

7. Endpoint ID 'nacos-discovery' contains invalid characters, please migrate to a valid format.

  端点 ID 'nacos-discovery' 包含无效字符,请迁移到有效格式。

  根据报错信息找到源代码,发现-和. 都会包这个问题;忽略

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
posted @ 2022-04-11 09:22  BBS_自律  阅读(1815)  评论(0编辑  收藏  举报