Nacos Discovery–服务治理
什么是服务治理?
服务治理是彻服务架种中最核心是基本的模块,用于实现各个微般务的自动化注册与发现
-
服务注册
:在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供服务的详细信息,并在注册中心形成一张服务的清单,服务注册中心需要以心跳的方式去监测清单中的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务, -
服务发现
:服务调用方向服务注册中心咨询服务,并获取所有服务的实例消单,实现对其体服务实例的访问,通过下面的调用图会发现除了微服务,还有一个组件是服务注册中心,它是微服务架构非常重要的一个组件,在微服务架构里主要起到了协调者的一个作用,注册中心一般包含如下几个功能:
1.服务发现:
- 服务注册:保存服务提供者和服务调用者的信息
- 服务订阅:服务调用者订阅服务提供者的信息注册中心向订间者推送提供者的信息
2.服务配置
- 配置订阅:服务提供省和服务调用者订阅微服务相关的配置
- 配置下发:主动将配置推送恰服务提供者和服务调用者
3.服务健康检测
- 检测服务提供者的健康情况,如果发现势常执行服务剔除
常见的注册中心
Zookeeper
-
zookeeper是一个分布式服务糖果,是Apache Hadoop 的一个子谈目,它主婴是用来航决分布式应用中经第遇到
Eureka
-
Eureka是SpringloudNeo中的重要组件,主要作用就最做服务注册和发现。但热现在已经闭源
Consul
-
Consu基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册,服务发规和配置管理的功第,Consu的功能都很实用,其中包括:服务注册/发现、健康检查,Key/value存储,多数据中心和分布式一改性保证等特性。Consul本身只是一个二进的可执行文件,所以安装和部署被非常能单,只需要从直网下就后,在执行对应启动类脚本即可。
Nacos
Nacos是一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台,它是 Spring Coud Ababa组件之一,负责服务注册发现和服务配置可以这样认为nacos=eureka + config
Nacos环境搭建
nacos-server 安装
下载地址:
https://github.com/alibaba/nacos/releases
- 安装步骤:下载zip格式的安装包,然后解压,进入bin目录,执行start.cmd文件。
-
访问地址:
http://localhost:8848/nacos
,默认登录账号密码均是:nacos。
nacos-client 安装
- 第一步:给微服务添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 第二步:给启动类添加nacos启动注解@EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan(value = "com.pxx.mapper")
public class ProductApplication {
public static void main(String[] args) {
SpringApplication.run(ProductApplication.class);
}
}
- 第三步:在配置文件添加nacos配置信息
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
注:要先启动nacos-server,然后再启动配置有nacos-client的微服务,两者均启动成功后,在nacos-server的服务管理->服务列表中查看已注册到nacos的微服务。
Nacos在项目中的应用
引入DiscoveryClient,通过DiscoveryClient获取nacos-client,获取要访问的微服务的地址和端口号,并通过RestTemplate发起请求(RestTemplate在我的上一篇文章中有提到,不懂的请看
《快速搭建简单的springcloud alibaba工程
》)。
public class OrderController {
@Autowired
RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping("/getOrderByProductId")
public String getOrderInfo(@RequestParam(name = "id",value = "id") Integer id){
// 通过nacos服务列表中的服务名,获取要访问的微服务,因为同一个服务器可能会有一个服务集群,所以返回的是一个列表
List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("service-product");
if (serviceInstanceList.size() == 0){
return null;
}
// 取其中一个进行访问
ServiceInstance serviceInstance = serviceInstanceList.get(0);
String productInfo = restTemplate.getForObject("http:/" + serviceInstance.getHost() + ":" + serviceInstance.getPort() +"/product/info/getInfoById?id=" + id,String.class);
log.info("id={},返回结果是{}",id,productInfo);
return productInfo;
}
// @RequestMapping("/getOrderByProductId")
// public String getOrderInfo(@RequestParam(name = "id",value = "id") Integer id){
// String productInfo = restTemplate.getForObject("http://localhost:8072/product/info/getInfoById?id=" + id,String.class);
// log.info("id={},返回结果是{}",id,productInfo);
// return productInfo;
// }
}
总结
本文只是简单介绍nacos的定义、快速搭建和简单应用,下一篇文章《负载均衡介绍》,我们将更深入对nacos进行学习。
版权声明:本文为qq_29153967原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。