服务注册与配置:Nacos

你的名字 2022-10-30 04:27 134阅读 0赞

目录

  • 第一章 Nacos的介绍
    • 1.1、Nacos是什么
    • 1.2、Nacos的特性
  • 第二章 Nacos安装与运行
    • 2.1、下载Nacos
    • 2.2、解压Nacos
    • 2.3、运行Nacos
    • 2.4、访问Nacos
  • 第三章 Nacos作注册中心
    • 3.1、服务提供者
      • 3.1.1、创建工程
      • 3.1.2、导入依赖
      • 3.1.3、编写配置
      • 3.1.4、主启动类
      • 3.1.5、控制器类
      • 3.1.6、启动测试
      • 3.1.7、服务集群
    • 3.2、服务消费者
      • 3.2.1、创建工程
      • 3.2.2、导入依赖
      • 3.2.3、编写配置
      • 3.2.4、主启动类
      • 3.2.5、控制器类
      • 3.2.6、启动测试
  • 第四章 Nacos作配置中心
    • 4.1、创三个配置文件
    • 4.2、修改服务提供者
      • 4.2.1、导入依赖
      • 4.2.2、添加配置
      • 4.2.3、修改配置
      • 4.2.4、写控制类
      • 4.2.5、启动测试
    • 4.3、配置的数据模型
  • 第五章 Nacos数据持久化
    • 5.1、持久化介绍
    • 5.2、持久化配置
      • 5.2.1、安装数据库
      • 5.2.2、导入数据表
      • 5.2.3、改配置文件
      • 5.2.4、重启Nacos
      • 5.2.5、创配置文件
      • 5.2.6、查看数据库
  • 第六章 Nacos高可用集群
    • 6.1、高可用集群介绍
    • 6.2、高可用集群搭建
      • 6.2.1、Nacos集群配置
      • 6.2.2、Nacos重新启动
      • 6.2.3、Nginx负载均衡
      • 6.2.4、Nginx软件启动
      • 6.2.5、Nginx访问测试
      • 6.2.6、Nginx地址修改

配套资料,免费下载
链接: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 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&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+。

71c8fbe3b530dc285e096602dbd0c50d.png

2.3、运行Nacos

单机运行:startup.cmd -m standalone

4d83ee162292b7cd9f55c43c03e065dc.png

2.4、访问Nacos

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

22ac847b4f615bfca23b5ec79475b7a5.png

第三章 Nacos作注册中心

3.1、服务提供者

3.1.1、创建工程

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

3.1.2、导入依赖

pom.xml

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-web</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-actuator</artifactId>
  13. </dependency>
  14. </dependencies>

3.1.3、编写配置

application.yaml

  1. server:
  2. port: 7001
  3. management:
  4. endpoints:
  5. web:
  6. exposure:
  7. include: '*'
  8. spring:
  9. application:
  10. name: service-goods
  11. cloud:
  12. nacos:
  13. discovery:
  14. server-addr: http://localhost:8848

3.1.4、主启动类

com.caochenlei.ServiceGoodsApplication

  1. @SpringBootApplication
  2. public class ServiceGoodsApplication {
  3. public static void main(String[] args) {
  4. SpringApplication.run(ServiceGoodsApplication.class, args);
  5. }
  6. }

3.1.5、控制器类

com.caochenlei.controller.GoodsController

  1. @RestController
  2. public class GoodsController {
  3. @Value("${server.port}")
  4. private Integer port;
  5. @RequestMapping("/goods/findByGid")
  6. public String findByGid(@RequestParam("gid") String gid) {
  7. return "server port:" + port + ",findByGid:" + gid;
  8. }
  9. }

3.1.6、启动测试

启动程序:com.caochenlei.ServiceGoodsApplication

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

5904b47d7d8db829de83fe54dc45aef5.png

1ac407aea714009d848f90227357d702.png

3.1.7、服务集群

d0a7afc8a3597587a29a88ccae69fa4b.png

f8799d7039b56a61c60e7f1ff07758f1.png

cd1689e0c26ba7cd794d79bd7b1586e0.png

c4e64f565397baf8f1dbb99d908228b9.png

2d3e13db70d73fec223460f4df0150fe.png

4fe1b534be463e9c4e740a15dd83e30f.png

6fb10487b8b629c53d05ca7fcc09f433.png

f7bb20ec48d902815c71679c1e37453c.png

3.2、服务消费者

3.2.1、创建工程

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

3.2.2、导入依赖

pom.xml

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-web</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-actuator</artifactId>
  13. </dependency>
  14. </dependencies>

3.2.3、编写配置

application.yaml

  1. server:
  2. port: 8001
  3. management:
  4. endpoints:
  5. web:
  6. exposure:
  7. include: '*'
  8. spring:
  9. application:
  10. name: service-order
  11. cloud:
  12. nacos:
  13. discovery:
  14. server-addr: http://localhost:8848

3.2.4、主启动类

com.caochenlei.ServiceOrderApplication

  1. @SpringBootApplication
  2. public class ServiceOrderApplication {
  3. public static void main(String[] args) {
  4. SpringApplication.run(ServiceOrderApplication.class, args);
  5. }
  6. @Bean
  7. @LoadBalanced
  8. public RestTemplate restTemplate(){
  9. return new RestTemplate();
  10. }
  11. }

3.2.5、控制器类

com.caochenlei.controller.OrderController

  1. @RestController
  2. public class OrderController {
  3. @Value("${server.port}")
  4. private Integer port;
  5. @Autowired
  6. private RestTemplate restTemplate;
  7. @RequestMapping("/order/findByOid")
  8. public String findByGid(@RequestParam("oid") String oid) {
  9. String goods = restTemplate.getForObject("http://service-goods/goods/findByGid?gid=1", String.class);
  10. return "server port:" + port + ",findByOid:" + oid + ",goods:" + goods;
  11. }
  12. }

3.2.6、启动测试

启动程序:com.caochenlei.ServiceOrderApplication

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

dda6702fd7d4269b079f56100ef657c7.png

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

8907b778046ec7806aa709c9b3f99690.png

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

458ecabe40d527444ffddb498d3c2ba2.png

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

第四章 Nacos作配置中心

4.1、创三个配置文件

16f9e4195c505af703cf3da2083b1923.png

application-dev.yaml

003621d3300124e4d4132dbe4f23ea6e.png

application-test.yaml

713b42e7108fdd7874e62ae1ffba3a2d.png

application-prod.yaml

bdc86878af051a2238c25fc11f1d7450.png

4.2、修改服务提供者

4.2.1、导入依赖

pom.xml

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  5. </dependency>
  6. ...
  7. ...
  8. </dependencies>

4.2.2、添加配置

bootstrap.yaml

  1. spring:
  2. application:
  3. name: service-goods
  4. profiles:
  5. active: dev #激活开发环境配置
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: http://localhost:8848
  10. config:
  11. server-addr: http://localhost:8848
  12. prefix: application #指定配置文件的前缀
  13. file-extension: yaml #指定配置文件的拓展名
  14. group: DEFAULT_GROUP #指定配置文件所在组
  15. namespace: public #指定配置文件所在命名空间

4.2.3、修改配置

application.yaml

  1. server:
  2. port: 7001
  3. management:
  4. endpoints:
  5. web:
  6. exposure:
  7. include: '*'

4.2.4、写控制类

com.caochenlei.controller.ReadConfigController

  1. @RestController
  2. @RefreshScope
  3. public class ReadConfigController {
  4. @Value("${myinfo}")
  5. private String myinfo;
  6. @RequestMapping("/myinfo")
  7. public String myinfo() {
  8. return myinfo;
  9. }
  10. }

4.2.5、启动测试

重启服务:ServiceGoodsApplication7001

重启服务:ServiceGoodsApplication7002

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

43f4f3db8911b8bfb5143ba62c62d8bf.png

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

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

0f27381252ba6a46d6b048188ef0e4b2.png

4.3、配置的数据模型

693c098d63fe4a8706e10cdb9dac4820.png

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目录

  1. C:\DevTools\mysql-5.7.33-winx64

(2)创建mysql配置

  1. C:\DevTools\mysql-5.7.33-winx64\my.ini
  2. [mysql]
  3. default-character-set=utf8
  4. [mysqld]
  5. port=3306
  6. character-set-server=utf8
  7. default-storage-engine=INNODB
  8. basedir=C:\\DevTools\\mysql-5.7.33-winx64
  9. datadir=C:\\DevTools\\mysql-5.7.33-winx64\\data

(3)创建data目录

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

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

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

(5)安装mysql服务

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

(6)初始mysql服务

  1. C:\DevTools\mysql-5.7.33-winx64\bin>mysqld --initialize --user=mysql --console
  2. ...
  3. ...
  4. ...
  5. 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服务

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

(8)登录mysql服务

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

(9)修改root密码

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

(10)退出mysql服务

  1. exit

(11)登录mysql服务

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

卸载mysql

(1)停止mysql服务

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

(2)删除mysql服务

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

(3)删除mysql目录

  1. 删除 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

7c7074b3f4587da5e58695df5078ba1a.png

  1. #*************** Config Module Related Configurations ***************#
  2. ### If use MySQL as datasource:
  3. spring.datasource.platform=mysql
  4. ### Count of DB:
  5. db.num=1
  6. ### Connect URL of DB:
  7. 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
  8. db.user.0=root
  9. db.password.0=123456

5.2.4、重启Nacos

请重新启动Nacos。

5.2.5、创配置文件

16f9e4195c505af703cf3da2083b1923.png

application-dev.yaml

003621d3300124e4d4132dbe4f23ea6e.png

application-test.yaml

713b42e7108fdd7874e62ae1ffba3a2d.png

application-prod.yaml

bdc86878af051a2238c25fc11f1d7450.png

5.2.6、查看数据库

58a7c75254968e3227bf7e519b2c92d2.png

第六章 Nacos高可用集群

6.1、高可用集群介绍

8fbc1e553c84ab5ca5aad68162007736.png

我们可以看到上边这是一个高可用的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

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

6.2.2、Nacos重新启动

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

6.2.3、Nginx负载均衡

修改文件nginx.conf

  1. events {
  2. worker_connections 1024;
  3. }
  4. http {
  5. include mime.types;
  6. default_type application/octet-stream;
  7. sendfile on;
  8. #这里写nacos的各个服务器的ip地址和端口号,理论上,最少三台,这里为了演示,就写了一台
  9. upstream nacos-cluster{
  10. server 192.168.1.3:8848;
  11. }
  12. server {
  13. listen 80;
  14. server_name localhost;
  15. location /{
  16. proxy_pass http://nacos-cluster;
  17. }
  18. }
  19. }

6.2.4、Nginx软件启动

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

6.2.5、Nginx访问测试

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

f78db6fa88fc8cb0fd16f2fd4ac1fcdf.png

6.2.6、Nginx地址修改

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

发表评论

表情:
评论列表 (有 0 条评论,134人围观)

还没有评论,来说两句吧...

相关阅读

    相关 nacos服务注册发现

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