一.注册中心原理
在微服务架构中,注册中心是最核心的基础服务之一
注册中心主要涉及到三大角色:
- 服务提供者 ---生产者
- 服务消费者 ---
- 服务发现与注册
注册中心应具备功能:
- 服务注册表
服务注册表是注册中心的核心,它用来记录各个微服务的信息,例如微服务的名称、IP、端口等。服务注册表提供查询API和管理API,查询API用于查询可用的微服务实例,管理API用于服务的注册与注销。- 服务注册与发现
服务注册是指微服务在启动时,将自己的信息注册到注册中心的过程。服务发现是指查询可用的微服务列表及网络地址的机制。- 服务检查
注册中心使用一定的机制定时检测已注册的服务,如发现某实例长时间无法访问,就会从服务注册表移除该实例。
二 常见的注册中心
Zookeeper
zookeeper是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式
应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用
配置项的管理等。
Eureka
Eureka是Springcloud Netflix中的重要组件,主要作用就是做服务注册和发现。但是现在已经闭源
Consul
Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。Consul的功能都很实用,其中包括:服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等特性。Consul本身只是一个二进制的可执行文件,所以安装和部署都非常简单,只需要从官网下载后,在执行对应的启动脚本即可。
Nacos
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它是 SpringCloud Alibaba 组件之一,负责服务注册发现和服务配置,可以这样认为nacos=eureka+config。
三.nacos入门
nacos简介
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
从上面的介绍就可以看出,nacos的作用就是一个注册中心,用来管理注册上来的各个微服务
nacos可以是注册中心还可以是配置中心
1.下载安装nacos
下载地址: Releases · alibaba/nacos · GitHub
下载zip格式的安装包,然后进行解压缩操作
1.4.1的下载地址是:
解压 在windows黑窗口运行
startup.cmd -m standalone
在浏览去登陆
默认的nacos是账号和密码
注册中心部署成功
添加依赖sys-order
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
添加配置
# 注册到注册中心里面 localhost:8848 # nacos 服务的地址在哪里 spring.cloud.nacos.discovery.server-addr=localhost:8848 #微服务的名字 spring.application.name=order
启动
看注册中心注册成功
在他的详情里
如果微服务的IP地址显示的是以1 为最后一位的话 直接将对应的虚拟机的网卡禁用即可
2. 在主启动类上添加nacos的开启注解
@EnableDiscoveryClient
注解的作用是 当前的微服务可以被nacos发现
现在不管加不加都会发现建议加
在创建一个maven项目把创建的三个项目都移进去
依赖只需要在sys-service里加就行了
里面的三个不需要再添加依赖了
只需要他们三个加载的主类修改一下
配置文件一个order两个pro
运行查看
3.负载均衡
什么是负载均衡
通俗的讲, 负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上 进行执行。
jar包sys-service
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
示例:sys-order(手写策略)
不加jar包会出错
看后台打印比较清晰
这个是轮询,下面的随机访问
示例:自定义策略
使用OpenFeign
OpenFeign默认的负载均衡规则是轮循
1.添加jar包
<!--使用openFeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.开始使用openFeign
在启动类上加注释
@EnableFeignClients
代表微服务之间的调用
创建一个接口找到微服务
可以使用
当然也可以随机但是要写一个配置类
public class LoadBalancerConfig {
@Bean
ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
LoadBalancerClientFactory loadBalancerClientFactory) {
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); //loadbalancer.client.name
// 对应的需要进行负载均衡的名字是什么
System.out.println("======"+name);
// product
return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
}
}
注解:微服务名字,配置类
服务熔断
<!-- 熔断--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
写一个实现类
在接口上加一个fallback
配置添加