微服务与分布式架构之nacos注册中心安装与配置
创始人
2024-11-10 22:04:01

微服务与分布式架构系统下的服务注册与发现是一个关键的环节,阿里提供的nacos以其安装与配置简单、功能强大而著称,是当前微服务与分布式项目开发中微服务治理工具的首选。

一、nacos简介

1、是阿里开源,遵循CAP中的AP原则

2、注册中心应用

3、配置中心应用

二、nacos服务的安装与配置

1、nacos下载

  • 全称是什么?

Naming Configuration Service,中文为“命名配置服务”。

  • nacos是什么?

是注册中心+配置中心+配置总线功能的组合,这里只介绍注册中心功能,其数据存储在内存中

  • 去哪儿下载?

下载地址:Releases · alibaba/nacos · GitHub

官网文档:Redirecting to: https://nacos.io/

2、nacos在Windows中安装与配置

windows下只是为了开发方便,使用的是单机模式,nacos的windows版本默认使用的就是单机模式。

(1)将解压后的nacos文件夹,拷贝到D\programd中

(2)在nacos的bin目录中,双击startup.cmd启动服务

(3)登录nacos管理页,用户名与密码都为nacos

3、nacos在Linux中安装与配置参考

在生产环境中,nacos肯定是集群模式,nacos至少三个节点才能构成集群,节点中的数据存储在mysql中。

3.1 Linux安装jdk1.8或以上版本

安装参考本站:Linux与CentOS系统管理及网络服务应用技巧-CSDN博客

3.2 修改bin/startup.sh文件

1、启动方式默认就是集群,不必修改export MODE="cluster"

2、nacos启动默认使用jvm内存2个g,如果服务器内存不足,可调整内存大小

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"

3.3 数据库初始化修改conf/application.properties

修改端口号,端口号分别为8848,8849,8850

server.port=8848

mysql持久

创建数据库

# 选择mysql持久化 spring.datasource.platform=mysql # 数据库数量 db.num=1 spring.datasource.platform=mysql # 数据连接配置 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=123

3.4 集群配置

1、设置集群地址

改名把conf/cluster.conf.example 改为为cluster.conf

设置ip和端口

2、产生三个服务

mv nacos/ nacos8848

cp -r nacos8848/ nacos8850

cp -r nacos8848/ nacos8849

3、修改后两个端口号

vi   nacos8849/conf/application.propertiesserver.port=8849

vi   nacos8850/conf/application.propertiesserver.port=8850

4、启动,依次执行如下命令

nacos8848/bin/startup.sh

nacos8849/bin/startup.sh

nacos8850/bin/startup.sh

5、测试,访问任意一个节点,输入帐号和密码,默认是nacos,观察集群管理中的节点列表http://192.168.188.107:8850/nacos

192.168.188.107:8848 192.168.188.107:8849 192.168.188.107:8850

三、nacos工作原理

1、服务注册

注册服务服务提供者client向nacos注册自己的服务信息(如:自己的ip,端口,服务名等信息),nacos会把这些信息存储在一个map中。

服务心跳client在注册后,会使用定时器默认每5秒向nacos发送一次心跳,用来说明本client是活跃状态。

2、服务发现

获取服务信息消费者client在调用服务提供者时,会向nacos发送请求,获取指定服务的注册数据,并缓存在client本地。

定时更新消费者开启一个定时器任务,拉取nacos最新的服务列表到本地缓存。

3、nacos服务

集群nacos集群之间会相互同步数据,在一至性方面,默认是ap,也可切换到cp。

建康检查nacos会定时检查已注册的服务实例的建康信息,如果超过15s都没有某实例的心跳,会将其healthy值设置为false,这种状态的服务信息不会在服务发现时获取,如果nacos超过30s都没收到该实例的心跳,会从服务列表中剔除,直到该实例恢复了心跳则重新注册。

四、nacos的应用

创建Spring boot的project项目,名称为mynacos,在此项目下分别创建两个module:provider与consumer

1、注册服务

创建一个module模块,名称为provider服务提供者,并进行配置。

  • pom文件
   com.alibaba.cloud   spring-cloud-starter-alibaba-nacos-discovery 
  • yml文件
server:   port: 8001  mybatis:   type-aliases-package: com.mysoft.beans   mapper-locations: [classpath:mapper/**/*.xml] spring:    application:       name: provider-dept # 在注册中心上显示的服务名    cloud:       nacos:         discovery:           server-addr: localhost:8848 # nacos地址,如果没有配置nacos地址,则默认就是localhost:8848    datasource: # 数据库连接池与数据库配置     type: com.alibaba.druid.pool.DruidDataSource     driver-class-name: com.mysql.jdbc.Driver     url: jdbc:mysql://localhost:3306/mydb     username: root     password: 1234
  • 主类添加注解:@EnableDiscoveryClient用于服务发现
@EnableDiscoveryClient @SpringBootApplication public class ProviderApplication {     public static void main(String[] args) {         SpringApplication.run(ProviderApplication.class, args);         System.out.println("提供者");     }
  • 启动该provider,观看nacos服务管理列表中是否有服务注册

2、发现服务

创建一个module模块,名称consumer服务消费者,并进行配置。

  • pom文件
   com.alibaba.cloud   spring-cloud-starter-alibaba-nacos-discovery 
  • yml文件
server:  port: 80 spring:  application:   name: consumer-na  cloud:   nacos:     discovery:       server-addr: 127.0.0.1:8848
  • 主类添加注解@EnableFeignClients
@EnableFeignClients @SpringBootApplication public class ConsumerApplication {      public static void main(String[] args) {         SpringApplication.run(ConsumerApplication.class, args);         //默认为提供者,可以通过Java设置为消费模式         System.out.println("消费者");     } } 
  • controller类
@RestController public class DeptController_Consumer {     //static String url="http://localhost:8001";     static String url="http://provider-dept";     @Autowired     RestTemplate tmp;      @RequestMapping("/consumer/dept/get/{id}")     public Dept get(@PathVariable Integer id){         System.out.println("id:"+id);         return tmp.getForObject(url+"/dept/get/"+id,Dept.class);     }     @RequestMapping("/consumer/dept/list")     public List list(){         return tmp.getForObject(url+"/dept",List.class);     } }
  • 修改配置类
@Configuration public class ConfigBean {     @Bean     //loadBalanced作用:在发起http请求时,会到注册中心读取服务对应的ip列表     @LoadBalanced     public RestTemplate getRestTmp(){         return new RestTemplate();     } }
  • 启动该consumer,观看nacos服务管理列表中是否有服务注册

3、测试一下

浏览器地址栏输入:localhost/consumer/dept/list

更多精彩内容请关注本站!!!

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...