当前位置:   article > 正文

SpringCloud Alibaba系列 Nacos(一)_spring cloud alibaba nacos

spring cloud alibaba nacos

目录

注册中心(服务治理)

什么是注册中心(服务治理)?

主流的注册中心有哪些?

什么是Nacos?

上手Nacos

环境准备

从 Github 上下载 Nacos

启动 Nacos 服务

关闭 Nacos 服务

SpringCloud Alibaba 整合 Nacos 实现服务的注册与发现

Nacos注册中心的作用

Nacos 配置中心

SpringCloud Alibaba 整合 Nacos 配置中心

Nacos 配置自动更新

Nacos 配置外部数据源MySQL

Nacos 配置权限认证


SpringCloudAlibaba官网:Spring Cloud Alibaba

SpringCloudAlibaba全家桶

服务注册发现:Nacos
服务限流降级:Sentinel
分布配置中心:Nacos
服务网关:SpringCloud Gateway
服务之间调用:Feign、Ribbon
链路追踪:Sleuth+Zipkin

注册中心(服务治理)

  • 什么是注册中心(服务治理)?

  • 服务注册:服务提供者provider,启动的时候向注册中心上报自己的网络信息
  • 服务发现:服务消费者consumer,启动的时候向注册中心上报自己的网络信息,拉取provider的相关网络信息
  • 核心:服务管理,有个服务注册表,心跳机制动态维护,服务实例在启动时注册到服务注册表,并在关闭时注销
  • 注册中心的作用?

微服务应用和机器越来越多,调用方需要知道接口的网络地址,如果靠配置文件的方式去控制网络地址,对于动态新增机器,维护带来很大问题

  • 主流的注册中心有哪些?

zookeeper、Eureka、consul、etcd、Nacos

什么是Nacos?

Nacos官网:https://nacos.io/zh-cn/

实现源码:Nacos注册中心实现原理

  • Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  • Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
  • Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。


上手Nacos

  • 环境准备

  • 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  • 64 bit JDK 1.8+
  • Maven 3.2.x+
  • Nacos需要至少2核CPU 4G内存 60g*3的机器配置下运行。

https://github.com/alibaba/nacos

  • 启动 Nacos 服务

Windows

cd nacos/bin

startup.cmd -m standalone        // 单机启动

Linux

cd nacos/bin

sh startup.sh -m standalone        // 单机启动

  • 关闭 Nacos 服务

Windows

双击 shutdown.cmd

Linux

sh shutdown.sh

默认http端口:8848,GRPC端口:9848、9849

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

默认账号密码:nacos/nacos


SpringCloud Alibaba 整合 Nacos 实现服务的注册与发现

maven版本管理如下

  1. <properties>
  2. <!-- jdk版本 -->
  3. <java.version>17</java.version>
  4. <!-- maven 打包版本 -->
  5. <maven.compiler.source>17</maven.compiler.source>
  6. <maven.compiler.target>17</maven.compiler.target>
  7. <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
  8. <!-- 编码 -->
  9. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  10. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  11. <spring.boot.version>2.7.4</spring.boot.version>
  12. <spring.cloud.version>2021.0.4</spring.cloud.version>
  13. <spring.cloud.alibaba.version>2021.0.4.0</spring.cloud.alibaba.version>
  14. </properties>
  15. <dependencyManagement>
  16. <dependencies>
  17. <!-- spring boot 版本 -->
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-dependencies</artifactId>
  21. <version>${spring.boot.version}</version>
  22. <type>pom</type>
  23. <scope>import</scope>
  24. </dependency>
  25. <!-- spring cloud 版本 -->
  26. <dependency>
  27. <groupId>org.springframework.cloud</groupId>
  28. <artifactId>spring-cloud-dependencies</artifactId>
  29. <version>${spring.cloud.version}</version>
  30. <type>pom</type>
  31. <scope>import</scope>
  32. </dependency>
  33. <!-- spring cloud alibaba 版本 -->
  34. <dependency>
  35. <groupId>com.alibaba.cloud</groupId>
  36. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  37. <version>${spring.cloud.alibaba.version}</version>
  38. <type>pom</type>
  39. <scope>import</scope>
  40. </dependency>
  41. </dependencies>
  42. </dependencyManagement>

子服务 pom 中添加注册发现依赖

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  4. </dependency>

application.yml 文件配置 nacos 注册中心

  1. spring:
  2. application:
  3. # 配置子服务名称
  4. name: user-service
  5. cloud:
  6. nacos:
  7. # 配置 nacos 服务地址
  8. discovery:
  9. server-addr: 127.0.0.1:8848

通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能

 启动子服务,可以看到服务已经在 nacos 注册成功


Nacos注册中心的作用

当没有注册中心的时候,A服务调用B服务如下

http://B的ip:端口/api?xxx=xxx

使用Nacos

http://serviceInstance.getHost()+serviceInstance.getPort()/api?xxx=xxx

示例 (没有负载均衡)

  1. @Bean
  2. public RestTemplate getRestTemplate() {
  3. return new RestTemplate();
  4. }
  1. @Service
  2. public class UserServiceImpl implements UserService {
  3. @Autowired
  4. private DiscoveryClient discoveryClient;
  5. @Autowired
  6. private RestTemplate restTemplate;
  7. /**
  8. * 用户服务调用订单服务
  9. * @param orderId 订单id
  10. */
  11. @Override
  12. public OrderDO getOrderDetail(Long orderId) {
  13. List<ServiceInstance> list = discoveryClient.getInstances("order-service");
  14. ServiceInstance serviceInstance = list.get(0);
  15. OrderDO orderDO = restTemplate.getForObject("http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/order/one?orderId="+orderId, OrderDO.class);
  16. return orderDO;
  17. }
  18. }

示例(带客户端负载均衡)

  1. <!-- 调用方添加此依赖 -->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  5. </dependency>
  1. @Bean
  2. @LoadBalanced
  3. public RestTemplate getRestTemplate() {
  4. return new RestTemplate();
  5. }
  1. @Service
  2. public class UserServiceImpl implements UserService {
  3. @Autowired
  4. private RestTemplate restTemplate;
  5. /**
  6. * 用户服务调用订单服务
  7. *
  8. * @param orderId 订单id
  9. */
  10. @Override
  11. public OrderDO getOrderDetail(Long orderId) {
  12. OrderDO orderDO = restTemplate.getForObject("http://order-service/order/one?orderId=" + orderId, OrderDO.class);
  13. return orderDO;
  14. }
  15. }

Nacos 配置中心

官网文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

SpringCloud Alibaba 整合 Nacos 配置中心

  • 步骤一

子服务 pom 中添加配置中心依赖

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  4. </dependency>
  • 步骤二

application.yml 文件配置 nacos 配置中心

注意:以bootstrap.yml命名的配置是旧版本的配置方式,这里是新版本的配置方式

  1. spring:
  2. cloud:
  3. nacos:
  4. config:
  5. # 指定 nacos 配置中心地址
  6. server-addr: 127.0.0.1:8848
  7. # 新版本 nacos 配置中心,指定 使用 配置中心的哪个配置文件
  8. config:
  9. import:
  10. - optional:nacos:user-service-dev.yaml
  11. # - optional:test_group.yml?group=test_group&refreshEnabled=false

配置说明:

spring.cloud.nacos.server-addr:指定 nacos 服务所在地址 ip:端口

spring.config.import:指定引用配置中心的哪个配置文件,可以用来区分 开发环境 or 生产环境,取值 Data ID、group、refreshEnabled,Data ID 必填

  • 步骤三

在 Nacos 网页控制台的配置管理中新增配置,如下:

配置完成后,验证配置中心是否配置成功,访问如下地址,请求到数据即表示配置成功:http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=user-service-dev.yaml&group=DEFAULT_GROUP


Nacos 配置自动更新

controller 层使用 @RefreshScope

如果想 测试环境开启配置文件自动更新,生产环境关闭配置文件自动更新

- optional:nacos:user-service-test.yaml?refreshEnabled=true        // 开启自动刷新
- optional:nacos:user-service-pro.yaml?refreshEnabled=false        // 关闭自动刷新


Nacos配置外部数据源MySQL

1:mysql版本要求5.7+,创建一个 nacos 数据库字符集选择 utf8mb4,把 nacos 数据库脚本导入库中,nacos 数据库脚本在你下载的nacos.zip包中,路径nacos-server-2.1.1/nacos/conf/nacos-mysql.sql

2:配置 nacos 的 MySQL 连接信息,/nacos-server-2.1.1/nacos/conf/application.properties

  1. spring.datasource.platform=mysql
  2. db.num=1
  3. db.url.0=jdbc:mysql://192.168.189.71:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
  4. db.user.0=root
  5. db.password.0=123456

3:重启 nacos 服务,验证:添加一条数据,查看数据库中是否存在


nacos 集群部署请查看官网文档:集群部署说明


Nacos 配置权限认证

1:在配置文件下 开启鉴权,/nacos-server-2.1.1/nacos/conf/application.properties 这个配置文件

  1. # 是否开启鉴权?
  2. nacos.core.auth.enabled=true

2:重启 nacos 服务,访问 nacos 控制台,在 权限控制 中操作用户权限即可。nacos采用的RBAC权限管理

3:修改 application.yml 配置文件,不然项目会启动失败,只使用了 nacos 配置中心的情况下

  1. spring:
  2. cloud:
  3. nacos:
  4. config:
  5. server-addr: 127.0.0.1:8848
  6. group: DEFAULT_GROUP
  7. # nacos 登录账号
  8. username: nacos_test
  9. # nacos 登录密码
  10. password: 123456
  11. # 登录哪个命名空间?在nacos控制台命名空间菜单中配置命名空间,并要求nacos_test这个账号对此命名空间有读(r)权限
  12. namespace: private
  13. config:
  14. import:
  15. # 这个文件要在命名空间中存在
  16. - optional:nacos:user-service-dev.yaml

 4:如果 项目中使用了 nacos 的 配置中心,也使用了 nacos 的注册发现,完整配置如下

  1. spring:
  2. cloud:
  3. nacos:
  4. # 注册发现配置
  5. discovery:
  6. server-addr: 127.0.0.1:8848
  7. # nacos 登录账号
  8. username: nacos_test
  9. # nacos 登录密码
  10. password: 123456
  11. # 指定 服务注册在哪个命名空间上,注意nacos_test这个账号,要对此命名空间有读写(rw)权限
  12. namespace: private
  13. # 配置中心配置
  14. config:
  15. server-addr: 127.0.0.1:8848
  16. group: DEFAULT_GROUP
  17. # nacos 登录账号
  18. username: nacos_test
  19. # nacos 登录密码
  20. password: 123456
  21. # 登录哪个命名空间?在nacos控制台命名空间菜单中配置命名空间,并要求nacos_test这个账号对此命名空间有读(r)权限
  22. namespace: private
  23. config:
  24. import:
  25. # 这个文件要在命名空间中存在
  26. - optional:nacos:user-service-dev.yaml

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/498887
推荐阅读
相关标签
  

闽ICP备14008679号