服务注册与配置:Nacos

配套资料,免费下载
链接:https://pan.baidu.com/s/1-eRFozbFIShqbqNRFD9KDw
提取码:rt3w
复制这段内容后打开百度网盘手机App,操作更方便哦

第一章 Nacos的介绍

1.1、Nacos是什么

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

简单来说,Nacos 就是Eureka + Spring Cloud Config + Spring Cloud Bus的增强版本,融合了众多技术于一身,更简单,更易用,更强大。

官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html

源码地址:https://github.com/alibaba/nacos

1.2、Nacos的特性

  • 服务发现和服务健康监测

    Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDKOpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODOHTTP&API查找和发现服务。

    Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

  • 动态配置服务

    动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

    动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

    配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。

    Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

  • 动态 DNS 服务

    动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

    Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表.

  • 服务及其元数据管理

    Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

第二章 Nacos安装与运行

2.1、下载Nacos

下载地址:https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.zip

2.2、解压Nacos

解压软件:请解压到路径中不包含中文以及空格的目录,Java运行环境为JDK1.8+。

2.3、运行Nacos

单机运行:startup.cmd -m standalone

2.4、访问Nacos

访问地址:http://localhost:8848/nacos/,登录账号:nacos,登录密码:nacos

第三章 Nacos作注册中心

3.1、服务提供者

3.1.1、创建工程

在父工程spring-cloud-alibaba-study下创建子项目service-goods

3.1.2、导入依赖

pom.xml

<dependencies>
    <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-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

3.1.3、编写配置

application.yaml

server:
  port: 7001

management:
  endpoints:
    web:
      exposure:
        include: '*'

spring:
  application:
    name: service-goods
  cloud:
    nacos:
      discovery:
        server-addr: http://localhost:8848

3.1.4、主启动类

com.caochenlei.ServiceGoodsApplication

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

3.1.5、控制器类

com.caochenlei.controller.GoodsController

@RestController
public class GoodsController {
    @Value("${server.port}")
    private Integer port;

    @RequestMapping("/goods/findByGid")
    public String findByGid(@RequestParam("gid") String gid) {
        return "server port:" + port + ",findByGid:" + gid;
    }
}

3.1.6、启动测试

启动程序:com.caochenlei.ServiceGoodsApplication

访问地址:http://localhost:8848/nacos

3.1.7、服务集群

3.2、服务消费者

3.2.1、创建工程

在父工程spring-cloud-alibaba-study下创建子项目service-order

3.2.2、导入依赖

pom.xml

<dependencies>
    <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-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

3.2.3、编写配置

application.yaml

server:
  port: 8001

management:
  endpoints:
    web:
      exposure:
        include: '*'

spring:
  application:
    name: service-order
  cloud:
    nacos:
      discovery:
        server-addr: http://localhost:8848

3.2.4、主启动类

com.caochenlei.ServiceOrderApplication

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

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

3.2.5、控制器类

com.caochenlei.controller.OrderController

@RestController
public class OrderController {
    @Value("${server.port}")
    private Integer port;

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/order/findByOid")
    public String findByGid(@RequestParam("oid") String oid) {
        String goods = restTemplate.getForObject("http://service-goods/goods/findByGid?gid=1", String.class);
        return "server port:" + port + ",findByOid:" + oid + ",goods:" + goods;
    }
}

3.2.6、启动测试

启动程序:com.caochenlei.ServiceOrderApplication

访问地址:http://localhost:8848/nacos

访问地址:http://localhost:8001/order/findByOid?oid=0

访问地址:http://localhost:8001/order/findByOid?oid=0

通过上边的演示,我们发现,默认就已经有了负载均衡的能力了。

第四章 Nacos作配置中心

4.1、创三个配置文件

application-dev.yaml

application-test.yaml

application-prod.yaml

4.2、修改服务提供者

4.2.1、导入依赖

pom.xml

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

4.2.2、添加配置

bootstrap.yaml

spring:
  application:
    name: service-goods
  profiles:
    active: dev #激活开发环境配置
  cloud:
    nacos:
      discovery:
        server-addr: http://localhost:8848
      config:
        server-addr: http://localhost:8848
        prefix: application #指定配置文件的前缀
        file-extension: yaml #指定配置文件的拓展名
        group: DEFAULT_GROUP #指定配置文件所在组
        namespace: public #指定配置文件所在命名空间

4.2.3、修改配置

application.yaml

server:
  port: 7001

management:
  endpoints:
    web:
      exposure:
        include: '*'

4.2.4、写控制类

com.caochenlei.controller.ReadConfigController

@RestController
@RefreshScope
public class ReadConfigController {
    @Value("${myinfo}")
    private String myinfo;

    @RequestMapping("/myinfo")
    public String myinfo() {
        return myinfo;
    }
}

4.2.5、启动测试

重启服务:ServiceGoodsApplication7001

重启服务:ServiceGoodsApplication7002

访问地址:http://localhost:7001/myinfo

修改配置:myinfo: application-dev.yaml,version=2

访问地址:http://localhost:7001/myinfo

4.3、配置的数据模型

Data Id

Nacos中的某个配置集合的ID,配置集合ID是组织划分配置的维度之一,Data ID通常用于组织划分系统的配置集合,一个系统或者应用可以包含多个配置集合,每个配置集都可以被一个有意义的名称标识。

Group

Nacos中的一组配置集合,是组织配置的维度之一,通过一个有意义的字符串(如 Buy 或 Trade)对一组配置集合进行分组,从而区分Data ID相同的配置集合,当在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP,配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如database_url配置和MQ_topic配置。

Namespace

用于配置隔离,不同命名空间下,可以存在相同的Group或Data ID配置,Namespace的常用场景之一是不同环境的配置进行区分隔离,例如开发环境、测试环境和生产环境的资源(如配置、服务)隔离等。

第五章 Nacos数据持久化

5.1、持久化介绍

Nacos默认情况下是采用Apache Derby内嵌数据库进行数据存储,在单机模式时可以使用Nacos嵌入式数据库实现数据存储,但是derby数据库不方便观察数据存储的基本情况,另外,在Nacos集群环境下,如果使用内嵌数据库,就不能保证数据库的一致性,因此,从Nacos 0.7版本开始增加了支持Mysql数据源能力。

5.2、持久化配置

5.2.1、安装数据库

安装数据库,版本要求:5.6.5+,这里我才用官方最新的版本mysql-5.7.33-winx64.zip,在安装之前一定要确保当前计算机中没有安mysql,否则会失败。

下载mysql

下载地址,32位:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.33-win32.zip

下载地址,64位:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.33-winx64.zip

安装mysql

(1)解压mysql目录

C:\DevTools\mysql-5.7.33-winx64

(2)创建mysql配置

C:\DevTools\mysql-5.7.33-winx64\my.ini
[mysql]
default-character-set=utf8

[mysqld]
port=3306
character-set-server=utf8
default-storage-engine=INNODB
basedir=C:\\DevTools\\mysql-5.7.33-winx64
datadir=C:\\DevTools\\mysql-5.7.33-winx64\\data

(3)创建data目录

C:\DevTools\mysql-5.7.33-winx64\data

(4)使用管理员启动cmd,然后进入到bin目录

C:\WINDOWS\system32>cd C:\DevTools\mysql-5.7.33-winx64\bin
C:\DevTools\mysql-5.7.33-winx64\bin>

(5)安装mysql服务

C:\DevTools\mysql-5.7.33-winx64\bin>mysqld -install mysql
Service successfully installed.

(6)初始mysql服务

C:\DevTools\mysql-5.7.33-winx64\bin>mysqld --initialize --user=mysql --console
...
...
...
2021-02-17T03:55:21.178240Z 1 [Note] A temporary password is generated for root@localhost: Jl3;h1WCnOoS

注意:密码在A temporary password is generated for root@localhost: Jl3;h1WCnOoS

(7)启动mysql服务

C:\DevTools\mysql-5.7.33-winx64\bin>net start mysql
mysql 服务正在启动 .
mysql 服务已经启动成功。

(8)登录mysql服务

C:\DevTools\mysql-5.7.33-winx64\bin>mysql -uroot -pJl3;h1WCnOoS

(9)修改root密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

(10)退出mysql服务

exit

(11)登录mysql服务

C:\DevTools\mysql-5.7.33-winx64\bin>mysql -uroot -p123456

卸载mysql

(1)停止mysql服务

C:\DevTools\mysql-5.7.33-winx64\bin>net stop mysql

(2)删除mysql服务

C:\DevTools\mysql-5.7.33-winx64\bin>sc delete mysql

(3)删除mysql目录

删除 C:\DevTools\mysql-5.7.33-winx64

注意:如果说删除目录不成功,请把所有cmd窗口、文件打开全部关闭,再重新尝试一次。

5.2.2、导入数据表

初始化数据库:CREATE DATABASE nacos_config; USE nacos_config;

导入数据库表:C:\DevTools\nacos\conf\nacos-mysql.sql

5.2.3、改配置文件

修改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=123456

5.2.4、重启Nacos

请重新启动Nacos。

5.2.5、创配置文件

application-dev.yaml

application-test.yaml

application-prod.yaml

5.2.6、查看数据库

第六章 Nacos高可用集群

6.1、高可用集群介绍

我们可以看到上边这是一个高可用的Nacos的架构图,而且一般来说,软件是安装到Linux环境中的,且一台机器安装一个软件,端口都是默认的8848。

但是为了教学的方便,Nginx的集群搭建和Mysql的集群搭建这里就不演示了,我们搭建一个Windows版本的高可用集群:1台Nginx+1台Nacos+1台Mysql。

Nginx的学习:https://caochenlei.blog.csdn.net/article/details/108300342

Mysql的学习:https://caochenlei.blog.csdn.net/article/details/107640904

我们现在已经安装好了mysql数据库,并且也已经配置好了nacos,nacos也已经连接了mysql数据库,而集群版的nacos只需要多一个配置文件就行了,这个配置文件就代表了所有nacos的ip:port。

6.2、高可用集群搭建

6.2.1、Nacos集群配置

cluster.conf.example拷贝一份为cluster.conf

#it is ip
#example
#192.168.16.101:8847
#192.168.16.102
#192.168.16.103
#这里存放的就是所有安装nacos的服务地址,也就是IP:PORT列表,这里只有一台,我就写一个,你有几台就写几,集群最少是3台,这里只是为了演示如何配
192.168.1.3:8848

6.2.2、Nacos重新启动

重新启动nacos,启动命令为:startup.cmd

6.2.3、Nginx负载均衡

修改文件nginx.conf

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    
	#这里写nacos的各个服务器的ip地址和端口号,理论上,最少三台,这里为了演示,就写了一台
	upstream nacos-cluster{
		server 192.168.1.3:8848;
	}
	
    server {
		listen 80;
		server_name localhost;
		location /{
			 proxy_pass http://nacos-cluster;                                              
		}
    }
}

6.2.4、Nginx软件启动

C:\DevTools\nginx-1.18.0>nginx.exe -c ./conf/nginx.conf

6.2.5、Nginx访问测试

浏览器输入:http://localhost/nacos/#/login

6.2.6、Nginx地址修改

spring:
  application:
    name: service-goods
  profiles:
    active: dev #激活开发环境配置
  cloud:
    nacos:
      discovery:
        ##正常来说,这个地址你需要修改,但是,这里就不修改了
        server-addr: http://localhost
      config:
        ##正常来说,这个地址你需要修改,但是,这里就不修改了
        server-addr: http://localhost
        prefix: application #指定配置文件的前缀
        file-extension: yaml #指定配置文件的拓展名
        group: DEFAULT_GROUP #指定配置文件所在组
        namespace: public #指定配置文件所在命名空间

原文地址:https://caochenlei.blog.csdn.net

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Nacos 中的参数有很多,如:命名空间、分组名、服务名、保护阈值、服务路由类型、临时实例等,那这些参数都是什么意思?又该如何设置?接下来我们一起来盘它。 1.命名空间 在 Nacos 中通过命名空间(Namespace)+ 分组(Group)+服务名(Name)可以定位到一个唯一的服务实例。 命名
Nacos 支持两种 HTTP 服务请求,一个是 REST Template,另一个是 Feign Client。之前的文章咱们介绍过 Rest Template 的调用方式,主要是通过 Ribbon(负载均衡) + RestTemplate 实现 HTTP 服务调用的,请求的核心代码是这样的: @
Nacos 是 Spring Cloud Alibaba 中一个重要的组成部分,它提供了两个重要的功能:服务注册与发现和统一的配置中心功能。 服务注册与发现功能解决了微服务集群中,调用者和服务提供者连接管理和请求转发的功能,让程序的开发者无需过多的关注服务提供者的稳定性和健康程度以及调用地址,因为这
Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录。而 Nacos 作为 Spring Cloud Alibaba 的核心组件之一,提供了两个非常重要的功能:服务注册中心(服务注册和发现)功能,和统一配置中心功能。 Nac
在 Nacos 的路由策略中有 3 个比较重要的内容:权重、保护阈值和就近访问。因为这 3 个内容都是彼此独立的,所以今天我们就单独拎出“保护阈值”来详细聊聊。 保护阈值 保护阈值(ProtectThreshold):为了防止因过多实例故障,导致所有流量全部流入剩余健康实例,继而造成流量压力将剩余健
前两天遇到了一个问题,Nacos 中的永久服务删除不了,折腾了一番,最后还是顺利解决了。以下是原因分析和解决方案,建议先收藏,以备不时之需。 临时实例和持久化实例是 Nacos 1.0.0 中新增了一个特性。临时实例和持久化实例最大的区别是健康检查的方式:临时实例使用客户端主动上报的健康检查模式,而
Spring Cloud Alibaba 技术体系中的 Nacos,提供了两个重要的功能:注册中心(服务注册与发现)功能和配置中心功能。 其中注册中心解决了微服务调用中,服务提供者和服务调用者的解耦,让程序开发者可以无需过多的关注服务提供者和调用者的运行细节,只需要通过 Nacos 的注册中心就可以
负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者——客户端负载均衡器。 服务端负载均衡器的问题是,它提供了更强的流量控制权,但无法满足不同的消费者希望使用不同负载均衡策略的需求,而使用不同负载均衡策略的场景确实是存在的,所以客
本篇文章为大家展示了如何解决Spring Cloud 服务冲突问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、背景...
本篇内容主要讲解“spring cloud服务的注册与发现怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“spri...
本篇内容介绍了“Dubbo怎么实现Spring Cloud服务治理 ”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处...
本篇内容主要讲解“SpringCloud相关面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringCloud相...
如何分析Spring Cloud Ribbon、Spring Cloud Feign以及断路器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希
这篇文章主要讲解了“springcloud微服务的组成部分有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“s...
这篇文章主要讲解了“SpringCloud的OpenFeign项目怎么创建”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习...
本篇内容主要讲解“spring cloud oauth3整合JWT后获取用户信息不全怎么办”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带...
怎样解析微服务架构SpringCloud,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。...
这篇文章主要介绍spring cloud中API网关的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、服务网关简介1、外观模式客户端...
本篇内容介绍了“Spring Cloud微服务的相关问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处...
本文小编为大家详细介绍“spring cloud config整合gitlab如何搭建分布式的配置中心”,内容详细,步骤清晰,细节处理妥当,希望这篇“spring cloud config整合gi...