当前位置: 当前位置:首页 > 焦点 > 【cloud Alibaba】(一)服务注册和配置中心——Nacos 正文

【cloud Alibaba】(一)服务注册和配置中心——Nacos

2024-05-06 22:56:56 来源:口口声声网 作者:休闲 点击:912次

【cloud Alibaba】(一)服务注册和配置中心——Nacos

在这里插入图片描述

  各位小伙伴们大家好,服务欢迎来到这个小扎扎的注册置中spring cloud专栏,在这个系列专栏中我对B站尚硅谷阳哥的和配spring cloud教程进行一个总结,鉴于 看到就是服务学到、学到就是注册置中赚到精神,这波依然是和配血赚 ┗|`O′|┛

💡Nacos知识点速览

  • 🍹 Nacos
    • 🍸 什么是SpringCloud Alibaba
    • 🍸 什么是Nacos?
    • 🍸 Nacos下载安装
  • 🍹 Nacos的使用
    • 🍸 Nacos服务注册与发现
      • 🍷 服务提供方9001、9002模块
      • 🍷 服务消费者83模块
      • 🍷 nacos作注册中心与其他的服务区别
    • 🍸 Nacos作配置中心
      • 🍷 基础配置
      • 🍷 进阶配置
  • 🍹 Nacos集群和持久化配置
    • 🍸 持久化数据库切换
    • 🍸 nacos集群配置
    • 🍸 nginx负载均衡

🍹 Nacos

🍸 什么是SpringCloud Alibaba

  前面已经学习过了SpringCloud为什么还要学习SpringCloud Alibaba?这是因为SpringCloud Netflix项目进入了维护模式,意味着 SpringCloud Netflix 将不再开发新的注册置中组件,维护中的和配组件将通过平行组件所替代。于是服务SpringCloud Alibaba应运而生,是注册置中目前比较主流的分布式微服务开发框架,它是和配在SpringCloud的基础上建立的

🍸 什么是Nacos?

  Nacos是SpringCloud Alibaba中的一个十分重要的组件,它的服务名字取自Nameing Configuration Service,这也就意味着Nacos承担着服务注册和配置中心的注册置中责任,也就相当于SpringCloud中erueka+config+bus的和配组合版。springcloud官网如是介绍到Nacos:阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

🍸 Nacos下载安装

  下载地址:https://github.com/alibaba/nacos/tags在这里插入图片描述
  下载完成之后解压缩zip压缩包,即可双击bin目录下的startup.cmd文件启动nacos的单机版进行使用,启动之后的nacos可以在浏览器通过url链接http://localhost:8848/nacos访问图形化界面,默认的用户名和密码都是nacos

🍹 Nacos的使用

🍸 Nacos服务注册与发现

  首先在使用SpringCloud Alibaba之前,必须在父项目的pom文件中引入SpringCloud Alibaba的依赖

com.alibaba.cloudspring-cloud-alibaba-dependencies    2.1.0.RELEASEpomimport

🍷 服务提供方9001、9002模块

这里以9001支付模块为例,9002参考9001模块进行创建
  第一步:创建maven项目并引入nacos依赖

com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery

  第二步:配置文件

server:  port: 9001spring:  application:    name: nacos-payment-provider  cloud:    nacos:      discovery:        server-addr: localhost:8848 #配置Nacos地址#端口暴露management:  endpoints:    web:      exposure:        include: '*'

  第三步:主启动类使用@EnableDiscoveryClient注解标注开启注册功能

@EnableDiscoveryClient@SpringBootApplicationpublic class CloudAlibabaPayment9001 {    public static void main(String[] args) {        SpringApplication.run(CloudAlibabaPayment9001.class, args);        System.out.println("启动成功");    }}

  第三步:controller接口

@RestControllerpublic class PaymentController {    @Value("${server.port}")    private String serverPort;    @GetMapping(value = "/payment/nacos/{id}")    public String getPayment(@PathVariable("id") Integer id) {        return "nacos registry, serverPort: " + serverPort + "\t id" + id;    }}

🍷 服务消费者83模块

  第一步:创建maven项目并引入nacos依赖

com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery

  第二步:配置文件

server:  port: 83spring:  application:    name: nacos-order-consumer  cloud:    nacos:      discovery:        server-addr: localhost:8848service-url:  nacos-user-service: http://nacos-payment-provider

  第三步:主启动类使用@EnableDiscoveryClient注解标注开启注册功能

@EnableDiscoveryClient@SpringBootApplicationpublic class CloudAlibabaConsumeOrder83 {    public static void main(String[] args) {        SpringApplication.run(CloudAlibabaConsumeOrder83.class, args);        System.out.println("启动成功");    }}

  第四步:由于使用到了ribbon的rpc调用,于是需要使用代码进行相关配置

@Configurationpublic class ApplicationContextConfig {    @Bean    @LoadBalanced    public RestTemplate getRestTemplate() {        return new RestTemplate();    }}

  第五步:controller接口

@RestController@RequestMapping("consumer")public class OrderNacosController {    @Resource    private RestTemplate restTemplate;    /**     * 从application.yml配置文件中读取该配置的值     */    @Value("${service-url.nacos-user-service}")    private String serverURL;    @GetMapping(value = "/payment/nacos/{id}")    public String paymentInfo(@PathVariable("id") Long id) {        return restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class);    }}

  经过上述的配置,目前注册中心中一共有三个服务,分别是服务提供者9001和9002,、服务消费者83。由于nacos的依赖里整合了ribbon依赖,所以说导入nacos依赖后可以实现服务访问的负载均衡操作,在服务消费方进行RestTemplate配置后,即可rpc远程轮询两个服务提供方。于是通过反复发送http://localhost:83/consumer/payment/nacos/23请求,即可发现数据是依次从9001和9002返回在这里插入图片描述

🍷 nacos作注册中心与其他的区别

  之前学习过Eureka和Zookeeper作服务的注册与发现,在CAP原则方面,Eureka选择使用AP原则,而Zookeeper选择使用CP原则,但是Nacos却可以在AP和CP原则之间进行切换,只需要使用一行PUT请求即可实现

curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

🍸 Nacos作配置中心

🍷 基础配置

  第一步:创建maven项目并引入nacos依赖

com.alibaba.cloudspring-cloud-starter-alibaba-nacos-configcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery

  第二步:配置文件,按加载顺序配置
bootstrap.yml

spring:  profiles:    active: dev

application.yml

server:  port: 3377spring:  application:    name: nacos-config-client  cloud:    nacos:      discovery:        server-addr: localhost:8848 #服务注册中心地址      config:        server-addr: localhost:8848 #配置中心地址        file-extension: yaml #指定yaml格式的配置

  第三步:主启动类使用@EnableDiscoveryClient注解标注开启注册功能

@EnableDiscoveryClient@SpringBootApplicationpublic class ConfigNacosClient3377 {    public static void main(String[] args) {        SpringApplication.run(ConfigNacosClient3377.class, args);        System.out.println("启动成功");    }}

  第四步:controller接口

@RestController@RefreshScope	// nacos的动态刷新public class ConfigClientController {    @Value("${config.info}")    private String configInfo;    @GetMapping("/config/info")    public String getConfigInfo() {        return configInfo;    }}

  第五步:创建远程配置文件,之前的springcloud远程配置使用的是GitHub或者Gitee实现,nacos则可以在它的图形化界面上直接创建配置文件,配置文件名的匹配规则如下在这里插入图片描述
  也就是说,以本次项目为例,nacos上配置文件的命名应该是nacos-config-client-dev.yaml
在这里插入图片描述
在这里插入图片描述

启动配置服务3377的主启动类,浏览器访问http://localhost:3377/config/info在这里插入图片描述
因为nacos支持动态刷新,所以当nacos上的配置文件值进行修改后,直接刷新链接即可刷新配置的值,反观springcloud Config还需要发送post请求手动刷新才能获取到最新的配置信息

🍷 进阶配置

为什么需要进阶配置?

  • 在实际开发中,通常—个系统会准备dev开发环境、test测试环境、prod生产环境…进阶配置可以保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件。
  • 一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境……那怎么对这些微服务配置进行管理呢?

  nacos的配置文件有Namespace命名空间(用于区分环境)、Group分组、Data lD文件名,它使用Namespace+Group+Data lD唯一定位一个在nacos上的远程配置文件。其中如果不进行配置指定的话,Namespace默认为public、Group默认为DEFAULT_GROUP,Data lD必须通过配置文件指定,匹配规则参考基础配置篇

分组group配置
在默认public命名空间里有两个同名配置文件,但是它们的分组不同
在这里插入图片描述
在这里插入图片描述
命名空间namespace配置
在这里插入图片描述
配置文件bootstra.yml中配置的namespace值是命名空间ID,而不是名字在这里插入图片描述

🍹 Nacos集群和持久化配置

  若想要实现Nacos集群的集群配置,需要三样东西:一个Nginx集群作为VIP进行负载均衡,一个nacos集群进行远程配置,一个MySQL进行集群配置的集中式存储,也就是以下这张官方给出的Nacos集群架构图(下面的所有配置操作都在Linux中完成,官方推荐在Linux中搭建nacos集群)在这里插入图片描述

🍸 持久化数据库切换

  nacos的远程配置将配置数据存储在内置的derby中(apache的一种内嵌式数据库),如果想要部署nacos集群,肯定不能让配置数据存储在集群成员各自的derby中,不然就会造成各成员间的数据不一致的现象。为了解决这一问题,我们需要一个集中式存储的方式来支持集群化部署,目前nacos只支持MySQL的存储,于是我们只能选择使用MySQL

  第一步:找到nacos安装目录下的conf文件夹里的nacos-mysql.sql,在Navicat中创建一个新的数据库并运行该sql文件,或者是使用命令运行,运行成功就会生成11张表,这些表就存储着nacos的各种信息数据

  第二步:修改conf文件下的application.properties文件配置你的MySQL数据库连接,如果你的nacos之前配置过其他ip的数据库就注释掉,如果没有就直接把以下配置配到该文件的最下面

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://数据库ip地址,本地就是localhost:3306/上一步创建的数据库名称?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=数据库的用户名
db.password=数据库的密码

  重启nacos服务重新访问nacos的图形化界面url就会得到一个干干净净的没有任何配置的nacos,而且这个nacos的所有新增配置都将会存储在application.properties文件配置的MySQL数据库中

🍸 nacos集群配置

  第一步:复制conf文件夹下的cluster.conf.example命名为cluster.conf,修改其中配置,先使用命令hostname -i来获取Linux的ip,然后把得到的ip加自定义端口号配置到cluster.conf文件中,配置到这个文件上的三个端口号在启动后会被认为是同一个nacos集群上的成员在这里插入图片描述
  第二步:复制bin文件夹下的start.sh文件命名为start.sh.bk作为备用,修改start.sh文件以达到可以通过-p命令的方式启动不同端口的nacos在这里插入图片描述
  第三步:修改start.sh文件最下面的
在这里插入图片描述

当修改完成之后就可以通过命令./startup.sh -p XXXX来以不同的端口号启动nacos了在这里插入图片描述

🍸 nginx负载均衡

  复制nginx的conf文件夹下的nginx.conf命名为nginx.conf.bk,修改nginx.conf.中的配置在这里插入图片描述

启动Nacos集群:
  进入nacos的bin目录下
  ./startup.sh -p 3333
  ./startup.sh -p 4444
  ./startup.sh -p 5555
  
启动nginx(-c指定配置文件的路径):
 进入nginx的sbin目录下
  ./nginx -c /usr/local/nginx/conf/nginx.conf
  
访问192.168.159.121:1111 如果可以进入nacos的web界面,就证明安装成功了

注册进nacos集群
将服务提供者微服务注册进nacos集群(此时nacos扮演的角色是注册中心,而不是配置中心),可以通过配置文件来完成在这里插入图片描述
以上操作,以9002模块视角分析就是如下情况
在这里插入图片描述

作者:娱乐
------分隔线----------------------------
头条新闻
图片新闻
新闻排行榜