SpringCloudAlibaba - Nacos (1) 服务治理
服务治理
服务治理就是管理所有的服务节点,核心功能包括:
- 服务注册(Client)
- 服务发现(Client)
- 心跳(Client)
- 健康检查(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 页面
其中分为五个管理模块:
- 配置管理(服务配置)
- 服务管理(服务治理)
- 权限控制(配置账号的菜单权限,不详细介绍)
- 命名空间(服务节点的环境隔离)
- 集群管理(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 pom
、order-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 由:命名空间 + 分组 + 服务名称
组成。
- 命名空间可以理解为不同的环境,比如:prod、test
- 分组就是在命名空间下进行了更细粒度的划分,增加了一层隔离维度
- 服务名称没什么好说的,就是服务名
注意:
任意一个部分不相同,都会被视为是不同的服务
。命名空间 与 分组任意不同则认为在不同的分区。不同分区间的服务无法互相调用
。
我们新建一个 test 命名空间,并将命名空间 id 在订单服务的配置文件中进行配置:
spring:cloud:nacos:discovery:namespace: 31d3c296-7634-4a16-a7e1-626b866d5e3f
启动服务后查看服务管理-服务列表
菜单:
Nacos 权限控制菜单
同常规管理系统中基于用户、角色、资源
的权限管理。
若要开启鉴权,必须在 Nacos Server 的管控台配置中添加鉴权开关:
权限控制菜单如下,只有超管账号 nacos
才有这个菜单:
具体配置方法就不一一解释了,配置一遍就清楚了。最终的效果是将不同用户绑定到不同角色,不同角色可以操作不同命名空间,并对命名空间进行不同的操作(r / w / rw)。
当登录用户没有权限时,会进行提示,例如:
SpringCloudAlibaba - Nacos (1) 服务治理相关推荐
- Spring Cloud Alibaba——Nacos实现服务治理
引言 本博客总结微服务开发中各个微服务调用的实现,并使用 Nacos 完成服务注册和发现. 文章中会涉及到 maven 的使用,以及 spring boot 的一些知识.开发工具采用 IDEA 202 ...
- Nacos之服务治理
服务治理 上面的例子中,是有风险的,有以下几个问题 问题1:一旦服务提供者的信息变化了,就不得不去修改服务调用者的代码 问题2:一旦服务提供者做了集群,服务调用者一方无法实现负载均衡去调用 问题3:一 ...
- Nacos注册中心和服务消费方式(服务治理)
目录 一.服务治理介绍 什么是服务治理? 二.nacos简介 三.nacos实战入门 1.搭建nacos环境 2.将商品.订单.微服务注册到nacos 四.实现服务调用的负载均衡 1.什么是负载均衡 ...
- SpringCloud微服务架构,Spring Cloud 服务治理(Eureka,Consul,Nacos),Ribbon 客户端负载均衡,RestTemplate与OpenFeign实现远程调用
什么是SpringCloud 微服务架构 • "微服务"一词源于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到 http://mar ...
- 理解nacos 服务治理(注册中心)、Nacos简介、下载与配置持久化到Mysql
Nacos简介 什么是Nacos Nacos致力于帮助您发现.配置和管理微服务.Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流且管理. Nacos帮助您更敏 ...
- Spring Cloud Alibaba【Nacos 服务治理】 高可用保证:Nacos 如何有效构建注册中心集群
上一节我们学习了 Nacos 注册中心的作用以及单点运行的方法,但是单点运行是分布式应用的大忌,在分布式架构中,任何单点都可能成为系统的瓶颈,因此在生产环境中 Nacos 都需要通过部署集群来为系统带 ...
- Spring Cloud Alibaba 之 服务治理:Nacos 如何实现微服务服务治理
前文我们学习了通用的微服务架构应包含哪些组件以及 Spring Cloud Alibaba 生态中对应的技术实现,其中整个架构体系最核心的组件是服务注册中心 Alibaba Nacos.本讲我们就对 ...
- 02 | 服务治理:Nacos 如何实现微服务服务治理
前文我们学习了通用的微服务架构应包含哪些组件以及 Spring Cloud Alibaba 生态中对应的技术实现,其中整个架构体系最核心的组件是服务注册中心 Alibaba Nacos.本讲我们就对 ...
- Spring Cloud Alibaba教程:使用Nacos作为服务注册中心
点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 什么是Nacos? Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易 ...
最新文章
- 2021-01-13 Matlab求解微分代数方程 (DAE)
- 【结合实例】信息增益的计算
- Bug输出Excel图片不显示
- NumPy - np.meshgrid()
- java版电子商务spring cloud分布式微服务b2b2c社交电商:服务容错保护(Hystrix断路器)...
- php5 mongodb,ThinkPHP5之Mongodb使用技巧
- 32 位的有符号整数_leetcode 7 整数反转
- Spring-bean的循环依赖以及解决方式___Spring源码初探--Bean的初始化-循环依赖的解决
- 原型对象prototype和原型属性[[Prototype]]
- java ssl 加密传输_java线程之四 SSL加密传输
- Mongodb 3.0 创建用户
- matlab 工具函数、matlab toolbox(工具箱)
- QT之交叉编译qmake的ARM版本套件(三)
- 算法7-16:弗洛伊德最短路径算法
- CDLinux破解各种无线网络
- iOS 录音踩坑之旅
- 匹配表情emoji 正则_新版Emoji表情过滤
- 中国移动互联网行业深度报告
- VC++ 设置桌面壁纸
- WINDOWS10 自带校验工具