服务治理

服务治理就是管理所有的服务节点,核心功能包括:

  1. 服务注册(Client)
  2. 服务发现(Client)
  3. 心跳(Client)
  4. 健康检查(Server)

安装 Nacos

官方文档,有两种方式:1.编译源码 2.下载压缩包。我们使用 v2.2.0 版本的 Nacos 进行学习。
一定要确认好 Nacos Server 与 Nacos Client 的版本关系,1.x 与 2.x 的 Nacos Server 有很大的差别。版本对照表在之前的开篇一文的结尾有链接。我们使用的 Nacos 客户端版本为(后面的 parent pom 中还会在给出):

<spring-cloud-alibaba.version>2.2.10-RC1</spring-cloud-alibaba.version>
<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
<spring-boot.version>2.3.12.RELEASE</spring-boot.version>

因为使用的 v2.2.0 版本,需要手动添加一下 application.properties 中的 JWT 密钥。

使用单机模式:.\startup.cmd -m standalone 启动后访问:http://localhost:8848/nacos,默认超管登录账号与密码:nacos,进入 Console 页面


其中分为五个管理模块:

  1. 配置管理(服务配置)
  2. 服务管理(服务治理)
  3. 权限控制(配置账号的菜单权限,不详细介绍)
  4. 命名空间(服务节点的环境隔离)
  5. 集群管理(Nacos 节点的集群管理)

其中配置管理服务管理正是对应微服务体系中服务配置(配置中心)服务治理这两个职责。

Nacos 服务管理菜单

下面我们接入一下 Nacos,将我们自己的服务:goods-service、order-service 注册到 Nacos 中,并可用通过管控台进行查看。

my-mall parent-pom

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><java.version>1.8</java.version><spring-cloud-alibaba.version>2.2.10-RC1</spring-cloud-alibaba.version><spring-cloud.version>Hoxton.SR12</spring-cloud.version><spring-boot.version>2.3.12.RELEASE</spring-boot.version>
</properties><dependencyManagement><dependencies><!-- spring --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

goods-service pomorder-service pom

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

注意,在SpringBoot 2.4.x的版本之后,若需要支持bootstrap.properties、bootstrap.yaml配置文件需要导入 spring-cloud-starter-bootstrap 依赖,根据需要引入下面的依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

修改服务的配置文件 application.yml(更多配置见 wiki):

server:port: 9100spring:mvc:path-match:matching-strategy: ANT_PATH_MATCHERapplication:name: goods-servicecloud:nacos:discovery:# nacos 服务地址server-addr: 127.0.0.1:8848# 在 nacos 中的服务名,默认为 ${spring.application.name}service: nacos-goods-service# nacos 服务用户名与密码username: nacospassword: nacos# 负载权重值weight: 1# 命名空间与 Group,用于环境隔离(namespace 默认为 public)namespace: publicgroup: goods-group// ---------------------------------------------------------------------server:port: 9200spring:mvc:path-match:matching-strategy: ANT_PATH_MATCHERapplication:name: order-servicecloud:nacos:discovery:# nacos 服务地址server-addr: 127.0.0.1:8848# 在 nacos 中的服务名,默认为 ${spring.application.name}service: nacos-order-service# nacos 服务用户名与密码username: nacospassword: nacos# 负载权重值weight: 1# 命名空间与 Group,用于环境隔离(namespace 默认为 public)namespace: publicgroup: order-group

启动类增加 @EnableDiscoveryClient(实测加与不加都会生效被注册到 Nacos 中):

@SpringBootApplication
@EnableDiscoveryClient
public class GoodsServiceApplication {public static void main(String[] args) {SpringApplication.run(GoodsServiceApplication.class, args);}
}

分别启动两个服务,并在管控台查看:


两个服务已经成功注册到了 Nacos 中,点击查看一下订单服务详情:

里面描述着服务的各种信息字段,注意右下角的下线按钮,触发后会修改服务注册表中该服务节点的状态,意味着其他服务无法在访问该节点。

我们在启动一个订单服务节点(新建一份订单服务的启动配置,我已经提前创建好了),使得订单单体服务转为集群:

启动后查看 Nacos 中订单服务的详情:


会发现新增了一条数据,服务节点的端口为 9201,正是我们新启动的订单服务。

负载均衡调用

我们先将商品、订单服务的 group 修改到同一组(包括端口为 9201 的订单服务):

spring:cloud:nacos:discovery:group: DEFAULT_GROUP

商品服务中新增负载均衡调用依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

在商品服务中新增负载均衡调用的 RestTemplate 以及编写一个测试接口,该接口会通过服务名称作为请求 ip 调用订单服务:

goods-service

@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {return restTemplateBuilder.build();
}@RestController
public class GoodsController {@Autowiredprivate RestTemplate restTemplate;@GetMapping(value = "/callOrder/{string}")public String echo(@PathVariable String string) {return restTemplate.getForObject("http://nacos-order-service/echo/" + string, String.class);}
}

order-service

@RestController
public class OrderController {@Value("${server.port}")private String port;@GetMapping(value = "/echo/{string}")public String echo(@PathVariable String string) {return String.format("Nacos Discovery %s %s", port, string);}
}

启动服务后访问:http://localhost:9100/callOrder/cqq

第一次访问:Nacos Discovery 9200 cqq
第二次访问:Nacos Discovery 9201 cqq

Nacos 命名空间菜单

Nacos 中的命名空间机制是提供给我们进行服务的环境隔离。每个服务完整的 id 由:命名空间 + 分组 + 服务名称 组成。

  1. 命名空间可以理解为不同的环境,比如:prod、test
  2. 分组就是在命名空间下进行了更细粒度的划分,增加了一层隔离维度
  3. 服务名称没什么好说的,就是服务名

注意:

  1. 任意一个部分不相同,都会被视为是不同的服务
  2. 命名空间 与 分组任意不同则认为在不同的分区。不同分区间的服务无法互相调用

我们新建一个 test 命名空间,并将命名空间 id 在订单服务的配置文件中进行配置:

spring:cloud:nacos:discovery:namespace: 31d3c296-7634-4a16-a7e1-626b866d5e3f

启动服务后查看服务管理-服务列表菜单:

Nacos 权限控制菜单

同常规管理系统中基于用户、角色、资源的权限管理。

若要开启鉴权,必须在 Nacos Server 的管控台配置中添加鉴权开关:

权限控制菜单如下,只有超管账号 nacos 才有这个菜单:

具体配置方法就不一一解释了,配置一遍就清楚了。最终的效果是将不同用户绑定到不同角色,不同角色可以操作不同命名空间,并对命名空间进行不同的操作(r / w / rw)。

当登录用户没有权限时,会进行提示,例如:

SpringCloudAlibaba - Nacos (1) 服务治理相关推荐

  1. Spring Cloud Alibaba——Nacos实现服务治理

    引言 本博客总结微服务开发中各个微服务调用的实现,并使用 Nacos 完成服务注册和发现. 文章中会涉及到 maven 的使用,以及 spring boot 的一些知识.开发工具采用 IDEA 202 ...

  2. Nacos之服务治理

    服务治理 上面的例子中,是有风险的,有以下几个问题 问题1:一旦服务提供者的信息变化了,就不得不去修改服务调用者的代码 问题2:一旦服务提供者做了集群,服务调用者一方无法实现负载均衡去调用 问题3:一 ...

  3. Nacos注册中心和服务消费方式(服务治理)

    目录 一.服务治理介绍 什么是服务治理? 二.nacos简介 三.nacos实战入门 1.搭建nacos环境 2.将商品.订单.微服务注册到nacos 四.实现服务调用的负载均衡 1.什么是负载均衡 ...

  4. SpringCloud微服务架构,Spring Cloud 服务治理(Eureka,Consul,Nacos),Ribbon 客户端负载均衡,RestTemplate与OpenFeign实现远程调用

    什么是SpringCloud 微服务架构 • "微服务"一词源于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到 http://mar ...

  5. 理解nacos 服务治理(注册中心)、Nacos简介、下载与配置持久化到Mysql

    Nacos简介 什么是Nacos Nacos致力于帮助您发现.配置和管理微服务.Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流且管理. Nacos帮助您更敏 ...

  6. Spring Cloud Alibaba【Nacos 服务治理】 高可用保证:Nacos 如何有效构建注册中心集群

    上一节我们学习了 Nacos 注册中心的作用以及单点运行的方法,但是单点运行是分布式应用的大忌,在分布式架构中,任何单点都可能成为系统的瓶颈,因此在生产环境中 Nacos 都需要通过部署集群来为系统带 ...

  7. Spring Cloud Alibaba 之 服务治理:Nacos 如何实现微服务服务治理

    前文我们学习了通用的微服务架构应包含哪些组件以及 Spring Cloud Alibaba 生态中对应的技术实现,其中整个架构体系最核心的组件是服务注册中心 Alibaba Nacos.本讲我们就对 ...

  8. 02 | 服务治理:Nacos 如何实现微服务服务治理

    前文我们学习了通用的微服务架构应包含哪些组件以及 Spring Cloud Alibaba 生态中对应的技术实现,其中整个架构体系最核心的组件是服务注册中心 Alibaba Nacos.本讲我们就对 ...

  9. Spring Cloud Alibaba教程:使用Nacos作为服务注册中心

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 什么是Nacos? Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易 ...

最新文章

  1. 2021-01-13 Matlab求解微分代数方程 (DAE)
  2. 【结合实例】信息增益的计算
  3. Bug输出Excel图片不显示
  4. NumPy - np.meshgrid()
  5. java版电子商务spring cloud分布式微服务b2b2c社交电商:服务容错保护(Hystrix断路器)...
  6. php5 mongodb,ThinkPHP5之Mongodb使用技巧
  7. 32 位的有符号整数_leetcode 7 整数反转
  8. Spring-bean的循环依赖以及解决方式___Spring源码初探--Bean的初始化-循环依赖的解决
  9. 原型对象prototype和原型属性[[Prototype]]
  10. java ssl 加密传输_java线程之四 SSL加密传输
  11. Mongodb 3.0 创建用户
  12. matlab 工具函数、matlab toolbox(工具箱)
  13. QT之交叉编译qmake的ARM版本套件(三)
  14. 算法7-16:弗洛伊德最短路径算法
  15. CDLinux破解各种无线网络
  16. iOS 录音踩坑之旅
  17. 匹配表情emoji 正则_新版Emoji表情过滤
  18. 中国移动互联网行业深度报告
  19. VC++ 设置桌面壁纸
  20. WINDOWS10 自带校验工具

热门文章

  1. SQL Server 数据完整性规则
  2. 人工智能在对冲基金的崛起
  3. 什么是数字货币、数字金融 和区块链?
  4. Linux基础(一) Linux命令
  5. 微信小程序城市范围画线
  6. SCILAB及其在控制系统仿真中的应用
  7. android 引入苹方字体,html苹方字体
  8. PAT L1 047 装睡
  9. 持安零信任 | 改变攻防不对称的局面
  10. 四轴飞行器MiniFly学习笔记01——飞行姿态