文章目录


1.服务治理

服务治理是微服务中核心模块,用于实现各个微服务的自动化注册和发现

服务注册:在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供服务的详细信息。并在注册中心形成一张服务的清单,服务注册中心需要以心跳的方式去监测清单中的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务。

服务发现:服务调用方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实例的访问。

2.注册中心的原理

1.启动服务的时候,会将服务信息告诉注册中心,同时拉取一份最新的服务列表到本地

2.每隔一段时间,每一个微服务会给注册中心发送心跳表,同时拉取最新的服务列表

3.如果这个服务挂了,注册中心会连续几次都没有收到心跳包的话,那么会将这个服务从注册中心移除,从而实现动态注册和踢出服务,我们不用手动管理

Spring Cloud Alibaba Nacos_服务提供者
Eureka扮演的是一个服务注册中心的角色
作用:
1.服务发现
服务注册:保存服务提供者和服务调用者的信息。
服务订阅:服务调用这订阅服务提供者的信息,注册中心向订阅者推送提供者的信息。

2.服务配置
配置订阅:服务提供者和服务调用者订阅微服务相关的配置。
配置下发:主动将配置推送给服务提供者和服务调用者。

3.服务健康检测
检测服务提供者的健康情况,如果发现服务连续几次都没有发送心跳包,说明这个服务有异常,执行服务剔除。

3.常见的注册中心

1.Zk
2.Eureka
3/Consul
4.Nacos

4.Nacos概述

Nacos是阿里巴巴2018年7月推出来的一个开源项目,是一个更易于构建云原生应用的动态服务注册与发现、配置管理和服务管理平台。Nacos致力于快速实现动态服务注册与发现、服务配置、服务元数据及流量管理。

他的核心功能:

服务注册:

Nacos Client会通过发送REST请求想Nacos Server注册自己的服务,提供自身的元数据,比如IP地址,端口等信息。Nacos Server接收到注册请求后,就会把这些元数据存储到一个双层的内存Map中。2. 服务心跳:

在服务注册后,Nacos Client会维护一个定时心跳来维持统治Nacos Server,说明服务一致处于可用状态,防止被剔除,默认5s发送一次心跳。3. 服务同步:

Nacos Server集群之间会相互同步服务实例,用来保证服务信息的一致性。4. 服务发现:

服务消费者(Nacos Client)在调用服务提供的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务拉取服务最新的注册表信息更新到本地缓存。5. 服务健康检查:

Nacos Server 会开启一个定时任务来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将他的healthy属性设置为false(客户端服务发现时不会发现),如果某个实例超过30s没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)。

5.Nacos实战

5.1 下载Nacos

Nacos和Eureka不同的是,它是一个jar包,cmd或者sh命令可以直接启动

Spring Cloud Alibaba Nacos_java_02

5.2 测试

浏览器输入http://localhost:8848/nacos

密码和用户名都是nacos

Spring Cloud Alibaba Nacos_java_03

5.3 商品服务加入nacos

shop-product-server服务的pom中加入nacos的依赖



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

然后主类加入注解
@EnableDiscoveryClient

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

application.yml中添加nacos服务的地址

spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848

查看

Spring Cloud Alibaba Nacos_微服务_04

5.4 将订单服务注册到Nacos

1.添加依赖



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

2.添加注解

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

@Bean
@LoadBalanced
public RestTemplate getInstance(){
return new RestTemplate();
}
}

3.application.yml添加nacos地址

spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848

Spring Cloud Alibaba Nacos_spring cloud_05

5.5 测试代码

  @Autowired
private DiscoveryClient discoveryClient;
@RequestMapping("test")
public String test(){
ServiceInstance serviceInstance = discoveryClient.getInstances("product-service").get(0);
return serviceInstance.toString();
}

Spring Cloud Alibaba Nacos_java_06