spring cloud 中nacos和getway的作用
Nacos
nacos作用:
在基于spring Cloud Alibaba的微服务框架中,nacos组件起到注册中心和配置中心的作用。
微服务系统一方面可以通过Nacos动态地感知并管理诸多业务模块,另一方面还可以通过Nacos管理全局性的配置参数。
nacos的使用:
Nacos组件往往会以高可用集群的形式对外提供服务,这样一旦单个Nacos失效,其它Nacos能继续对外提供服务。
微服务知识:
微服务角色有 “服务提供者” 和 ‘f服务调用者’。服务调用者会调用封装在服务提供者模块中的业务方法。
为了正确地调到服务,服务调用者需要知道所调用方法的IP地址、端口号和方法名等关键信息。
比较容易的办法是以静态文件的形式存储这些信息,但是这样两者的依赖性比较强,服务提供方的服务方法的各种信息可能会变更,变更后就需要修改静态文件,维护成本高,解决方法用nacos动态管理诸多服务方法。
nacos配置中心
系统在运行时,往往会读取一些配置参数,在spring cloud 微服务架构中,一般通过nacos等组件搭建配置中心,用统一的方式来管理各种配置参数。
新建配置示例
Data ID:新增配置参数的ID
group: 配置参数所属模块
“Data ID“和“Group”这两者是参数的“唯一标识符”。也就是说,通过指定的“Data ID“和“Group”,能定位到唯一的一组配置参数。
完成后向nacos配置中心发布刚才所设置的配置参数即可生效。
引入nacos配置中心依赖包
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.1</version>
</dependency>
在启动类中通过@NacosPropertySource注解,说明了该Spring Boot项目将会从Nacos配置中心里,读取groupId为RiskModule、dataId为retryTimes的配置参数。
@NacosPropertySource(dataId = "retryTimes", groupId = "RiskModule", autoRefreshed = true)
在application.properties配置文件里,指定Nacos配置中心的IP地址和端口号
在控制类里,可以通过@NacosValue注解,读取参数名为readRetryTimes和writeRetryTimes的参数,
这样做的优点
在发布和管理项目时,运维人员能在配置中心里统一的管理诸多业务模块中的参数,有效避免配置参数遗漏和管理混乱等问题。
程序员能用统一风格读取参数,提升项目的可读性和可维护性。
spring boot 整合nacos注册中心
一方面,服务提供者可以向Nacos注册中心注册注册对应的服务方法,另一方面,服务调用者能从Nacos注册中心查找所调用方法的IP地址、端口号和服务名等信息,并在此基础上调用对应的方法。
nacos还可以动态的加入新的服务方法,剔除已失效的服务方法。
图片:
作为服务提供者的Spring Boot项目在启动时,会根据配置,主动向Nacos注册中心注册服务,
作为服务消费者的Spring Boot项目在调用服务时,会先从Nacos注册中心查找服务对应的IP地址和端口号等细节,在此基础上完成服务的调用动作。
服务提供方配置
引入spring cloud
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
引入nacos
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
通过启动类中添加**@EnableDiscoveryClient**注解,说明本类将向在配置文件里定义的Nacos注册中心注册服务。
在application.properties 文件中指定本项目将会向工作在某个端口的nacos注册服务。
spring.application.name=nacosProvider
nacos.discovery.server-addr=127.0.0.1:8848
服务消费者
启动类依然需要被**@EnableDiscoveryClient**修饰,指定本项目会和nacos注册中心交互。
在方法中发出的url请求会从注册中心里赵大鹏提供该服务主机的ip地址和端口,并据此调用服务方法。
同样需要在application.properties 中指定待交互的nacos注册中心的IP地址和端口号。
nacos集群
如果Nacos组件是以单机版的形式对外提供注册中心和配置中心的服务,那么当这台Nacos服务器出现故障时,就会出现“服务不可用”和“无法取到配置参数”等严重问题。
为了提升系统的可用性,在一些项目里往往会以集群的方式搭建Nacos集群,这样一旦集群中有Nacos服务器出现故障,那么其它服务器依然能对外提供服务,这样就能提升系统的可用性。
nacos持久化
nacos持久化:把服务列表和配置参数等信息保存到数据库里,当nacos服务重启时,就能从数据库里读取到之前保存的信息,从而能保证数据不丢失。
核心步骤:在MySQL客户端中新建nacos库,并在其中运行nacos-mysql.sql文件里的数据库脚本。运行效果 在nacos数据库里创建了若干个数据表。
搭建集群
- 把包含nacos组件的目录复制两份
- 在application.properties 配置文件中加入持久化配置参数,并且通过代码指定nacos的工作端口
- 在conf子路径中创建一个cluster.conf的配置文件,在其中配置集群中的节点信息
- 打开startup.cmd文件 通过以下代码设置nacos的启动模式为“集群”。
set MODE="cluster"
nacos常见面试题
简述Nacos注册中心的作用
首先呢nacos作为区别与服务提供者和服务消费者之外的第三方,隔离了两者之间的业务细节,也就是说当服务提供者内部一些方法名参数更改或者增加时,服务消费者并不会直接的受到其的影响也不需要更改请求,而是通过向注册中心重新拉取服务提供方的服务列表来完成同步。