2021年10月7日----Springcloud服务治理组件EUREKA
Springcloud服务治理组件EUREKA
- eureka概括
- 1.1介绍
- 服务治理
- eureka角色
- EUREKA治理组件的应用
- 2.1、搭建一个注册中心
- 创建eureka注册中心工程eureka-server
- eureka客户端功能
- pom文件
- application.properties
- 启动类
- 编写一个接口文件测试
- eureka治理组件的原理
eureka概括
1.1介绍
springcloud实现了服务集群治理的核心组件,主要复杂微服务架构的服务治理功能。这个组件是美国一个视频公司netflix开发的,后被springcloud整合,在奈非已经对eureka停更了,代替者组件转向springcloud alibaba nacos。这两者除了使用稍微有区别,在结构是上基本是一致的。
服务治理
服务治理可以说是微服务架构中最核心的模块,他是主要实现各个微服务实例的自动化注册与发现,动态管理整个集群的所有细节。
- 注册:是为了让别人能够找到自己,并且调用自己的功能
- 发现:是为了能够找到别人并且调用他的功能。
eureka角色
eureka组件,可以砍成一套有客户端,有服务端
- 服务端:提供一个独立运行web应用,配备了各种支持http协议的REST风格的接口,接收客户端请求,管理注册和发现内容。
- 客户端:通过http协议REST风格的接口访问服务端的web应用,目的是实现注册或者发现
EUREKA治理组件的应用
2.1、搭建一个注册中心
利用eureka搭建的注册中心,是springcloud微服务集群的基础,是一个福利运行的,实现治理功能的web应用,具备eureka的服务端功能,同时也把自己看成是一个客户端(高可用设计的)
- maven项目
- 03-springcloud-parent下创建工程
- 创建3-1-eureka-server的项目
- 为了子工程具备开发springcloud的能力,在父级工程的pom中添加
- 继承springboot:springcloud一定以及springboot进行开发,版本严格相应的,当前springboot2.2.5.RELEASE对应的springcloud可以看做是Hoxton
- 导入springcloud为了版本统一做的导入
<modelVersion>4.0.0</modelVersion> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version><relativePath/> </parent> <!--导入和2.2.5.RELEASE版本兼容的spring cloud版本 Hoxton.SR3--> <dependencyManagement><dependencies><!--导入cloud--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR3</version><scope>import</scope><type>pom</type></dependency></dependencies> </dependencyManagement>
创建eureka注册中心工程eureka-server
- pom文件![- springboot-started](.png)
<parent><artifactId>03-SPRINGCLOUD-PARENT</artifactId><groupId>cn.tedu</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>3-1-eureka-server</artifactId><dependencies><!--开发web应用的依赖 starter-web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--开发配置注册中心的依赖 eureka-server--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies>
application.properties
#端口,统一暂定8761
server.port=8761
#给当前应用一个应用名称,在springcloud中会成为微服务名称 专业模块服务 major-service 教师模块服务 teacher-service
spring.application.name=eureka-server
#注册中心除了主要功能是作为eureka服务端管理注册信息,管理发现逻辑,还能成为一个客户端 在注册中心服务端注册
#作为客户端的注册和发现功能关闭
eureka.client.fetch-registry=false
eureka.client.register-with-eureka=false
#一旦后续开启,我会告知这个客户端注册中心,到哪个服务端进行注册
eureka.client.service-url.zone=http://localhost:8761/eureka
启动类
启动项目观察控制台
可以访问运行的项目http://localhost:8761/
展示当前注册中管理的所有的注册服务信息,因为当前中心没有任何服务客户端来注册,所以没有任何内容
可以在启动的注册中配置文件中,开启注册功能
就是把当前注册中心会把自己看成是自己的客户端,进行注册功能。
application:服务名称,也是在application.propertis中配置的值
status:显示一个实例名称,当前这个服务有几个人来提供,实例名称的组成
服务端启动完毕,可以访问localhost:8751/eureka/apps看到当前账户侧中心的注册信息
eureka客户端功能
作为一个微服务工程(纵向拆分之后的独立运行的系统),将自己的信息注册在注册中心,等待别人来抓取和调用
pom文件
<dependencies><!--web应用依赖 starter-web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--eureka-client依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies>
application.properties
server.port=8091
#在当前web项目中编写测试代码 访问/hello say个hi
spring.application.name=hi-service
eureka.client.fetch-registry=false
eureka.client.register-with-eureka=true
eureka.client.service-url.zone=http://localhost:8761/eureka
启动类
@SpringBootApplication
编写一个接口文件测试
/*** eureka-client客户端系统,作为服务实例系统,做为被调用者* 准备的一个测试接口* /hello* 返回 hello eureka i am from {server.port}*/
@RestController
public class HelloController {//属性注入@Value("${server.port}")private String port;@RequestMapping("/hello")public String sayHi(String name){return "hello eureka "+name+",i am from "+port;}
}
eureka治理组件的启动结构
eureka治理组件的原理
客户端角色:启动之后实现的逻辑
- 注册:开启了register-with-eureka,客户端进程会根据配置eureka.client.service-uri.aone的值发起注册http请求,并且在请求中通过请求参数,携带自身信息,包括ip,包括域名,包括端口,包括服务名称,详细信息
- 抓取:客户端配置fetch-registry,就会每隔30秒,到注册信息抓取所有的信息,因为有调用其他微服务的需求
- 心跳:在注册中心管理的注册信息是有时效,不能注册一次永久保存,客户端功能希望总是被别人发现调用,每隔30秒中到注册中心发送一次心跳续约。
- 服务端角色
管理注册信息:当客户端到服务端访问,通过请求参数实现注册时,服务端会在內存中维护一个双层map结构的注册信息对象,对象详细结构是:Map<String,Map<String,Instance>>
- 服务剔除:注册中心,执行定时任务,每隔60秒中检测一次所有微服务提供者,最后心跳时间,如果发现某一个客户端注册信息中,心跳超过90秒未心跳,就作为超时客户端进行剔除,从注册信息中删除数据
- 保护机制:由于注册中心中管理的所有服务都是一个整体系统的集合,正常情况下我服务体系非常庞大,有很多微服务,每个微服务都有很多的服务提供者(客户端),如果出现故障也正常的,但是保护机制认为,Eugene某个时间点eureka判断超时剔除的服务数量大于15%,这种情况就属于非正常超时(很有肯是网络波动造成的心跳不可达,实际上客户端没有宕机),为了保证微服务集群正常运行会开启保护机制,这是没有任何服务被剔除,知道恢复15%以内的心跳续约,保护机制关闭----为了防止网络波动造成错误的剔除大量的客户端导致微服务集群瘫痪。
2021年10月7日----Springcloud服务治理组件EUREKA
Springcloud服务治理组件EUREKA
- eureka概括
- 1.1介绍
- 服务治理
- eureka角色
- EUREKA治理组件的应用
- 2.1、搭建一个注册中心
- 创建eureka注册中心工程eureka-server
- eureka客户端功能
- pom文件
- application.properties
- 启动类
- 编写一个接口文件测试
- eureka治理组件的原理
eureka概括
1.1介绍
springcloud实现了服务集群治理的核心组件,主要复杂微服务架构的服务治理功能。这个组件是美国一个视频公司netflix开发的,后被springcloud整合,在奈非已经对eureka停更了,代替者组件转向springcloud alibaba nacos。这两者除了使用稍微有区别,在结构是上基本是一致的。
服务治理
服务治理可以说是微服务架构中最核心的模块,他是主要实现各个微服务实例的自动化注册与发现,动态管理整个集群的所有细节。
- 注册:是为了让别人能够找到自己,并且调用自己的功能
- 发现:是为了能够找到别人并且调用他的功能。
eureka角色
eureka组件,可以砍成一套有客户端,有服务端
- 服务端:提供一个独立运行web应用,配备了各种支持http协议的REST风格的接口,接收客户端请求,管理注册和发现内容。
- 客户端:通过http协议REST风格的接口访问服务端的web应用,目的是实现注册或者发现
EUREKA治理组件的应用
2.1、搭建一个注册中心
利用eureka搭建的注册中心,是springcloud微服务集群的基础,是一个福利运行的,实现治理功能的web应用,具备eureka的服务端功能,同时也把自己看成是一个客户端(高可用设计的)
- maven项目
- 03-springcloud-parent下创建工程
- 创建3-1-eureka-server的项目
- 为了子工程具备开发springcloud的能力,在父级工程的pom中添加
- 继承springboot:springcloud一定以及springboot进行开发,版本严格相应的,当前springboot2.2.5.RELEASE对应的springcloud可以看做是Hoxton
- 导入springcloud为了版本统一做的导入
<modelVersion>4.0.0</modelVersion> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version><relativePath/> </parent> <!--导入和2.2.5.RELEASE版本兼容的spring cloud版本 Hoxton.SR3--> <dependencyManagement><dependencies><!--导入cloud--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR3</version><scope>import</scope><type>pom</type></dependency></dependencies> </dependencyManagement>
创建eureka注册中心工程eureka-server
- pom文件![- springboot-started](.png)
<parent><artifactId>03-SPRINGCLOUD-PARENT</artifactId><groupId>cn.tedu</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>3-1-eureka-server</artifactId><dependencies><!--开发web应用的依赖 starter-web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--开发配置注册中心的依赖 eureka-server--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies>
application.properties
#端口,统一暂定8761
server.port=8761
#给当前应用一个应用名称,在springcloud中会成为微服务名称 专业模块服务 major-service 教师模块服务 teacher-service
spring.application.name=eureka-server
#注册中心除了主要功能是作为eureka服务端管理注册信息,管理发现逻辑,还能成为一个客户端 在注册中心服务端注册
#作为客户端的注册和发现功能关闭
eureka.client.fetch-registry=false
eureka.client.register-with-eureka=false
#一旦后续开启,我会告知这个客户端注册中心,到哪个服务端进行注册
eureka.client.service-url.zone=http://localhost:8761/eureka
启动类
启动项目观察控制台
可以访问运行的项目http://localhost:8761/
展示当前注册中管理的所有的注册服务信息,因为当前中心没有任何服务客户端来注册,所以没有任何内容
可以在启动的注册中配置文件中,开启注册功能
就是把当前注册中心会把自己看成是自己的客户端,进行注册功能。
application:服务名称,也是在application.propertis中配置的值
status:显示一个实例名称,当前这个服务有几个人来提供,实例名称的组成
服务端启动完毕,可以访问localhost:8751/eureka/apps看到当前账户侧中心的注册信息
eureka客户端功能
作为一个微服务工程(纵向拆分之后的独立运行的系统),将自己的信息注册在注册中心,等待别人来抓取和调用
pom文件
<dependencies><!--web应用依赖 starter-web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--eureka-client依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies>
application.properties
server.port=8091
#在当前web项目中编写测试代码 访问/hello say个hi
spring.application.name=hi-service
eureka.client.fetch-registry=false
eureka.client.register-with-eureka=true
eureka.client.service-url.zone=http://localhost:8761/eureka
启动类
@SpringBootApplication
编写一个接口文件测试
/*** eureka-client客户端系统,作为服务实例系统,做为被调用者* 准备的一个测试接口* /hello* 返回 hello eureka i am from {server.port}*/
@RestController
public class HelloController {//属性注入@Value("${server.port}")private String port;@RequestMapping("/hello")public String sayHi(String name){return "hello eureka "+name+",i am from "+port;}
}
eureka治理组件的启动结构
eureka治理组件的原理
客户端角色:启动之后实现的逻辑
- 注册:开启了register-with-eureka,客户端进程会根据配置eureka.client.service-uri.aone的值发起注册http请求,并且在请求中通过请求参数,携带自身信息,包括ip,包括域名,包括端口,包括服务名称,详细信息
- 抓取:客户端配置fetch-registry,就会每隔30秒,到注册信息抓取所有的信息,因为有调用其他微服务的需求
- 心跳:在注册中心管理的注册信息是有时效,不能注册一次永久保存,客户端功能希望总是被别人发现调用,每隔30秒中到注册中心发送一次心跳续约。
- 服务端角色
管理注册信息:当客户端到服务端访问,通过请求参数实现注册时,服务端会在內存中维护一个双层map结构的注册信息对象,对象详细结构是:Map<String,Map<String,Instance>>
- 服务剔除:注册中心,执行定时任务,每隔60秒中检测一次所有微服务提供者,最后心跳时间,如果发现某一个客户端注册信息中,心跳超过90秒未心跳,就作为超时客户端进行剔除,从注册信息中删除数据
- 保护机制:由于注册中心中管理的所有服务都是一个整体系统的集合,正常情况下我服务体系非常庞大,有很多微服务,每个微服务都有很多的服务提供者(客户端),如果出现故障也正常的,但是保护机制认为,Eugene某个时间点eureka判断超时剔除的服务数量大于15%,这种情况就属于非正常超时(很有肯是网络波动造成的心跳不可达,实际上客户端没有宕机),为了保证微服务集群正常运行会开启保护机制,这是没有任何服务被剔除,知道恢复15%以内的心跳续约,保护机制关闭----为了防止网络波动造成错误的剔除大量的客户端导致微服务集群瘫痪。
发布评论