Eureka
Eureka概述:
管理服务,核心是有一个服务注册表,这个服务注册表会依据心跳机制来维护
- Register:client通过发送http请求将自己的ip,port等发送到server中,server会将这些信息保存到服务注册表中
- Renew:client通过心跳机制来告诉server自己存活,client会每隔30s向server发送一次http请求,向server说明自己存活,当server检测到一个client 90s没有发送请求,并且没有进入保护模式,那么会将这个client清除掉
- Get Registy:client会每隔30s从server拉去注册表,会与本地缓存的列表进行合并
- Make Remote Call:服务之间进行调用可使用Feign和RestTemplete
- Cannel:client下线
- Replicate:Server集群之间的数据同步
保护机制:EurekaServer在运行期间会统计EurekaClient心跳失败的比例,若15分钟内失败比例大于85%,会将这个EurekaClient保护起来,不会清除这个服务
Eureka特点:
- 可以自己向自己注册
- 注册到注册中心的服务,在使用Feign或restTemplete跨服务调用时不需要得到其真是地址,只需要
根据注册到注册中心的服务名称进行通讯 - 可以实现高可用,一个服务可以同时注册到多个注册中心,指的是服务一直可用,而且是正常的相应时间
注册中心、提供者、消费者关系
顾名思义提供者将服务注册到注册中心,消费者在注册中心的管理下选择相应的服务进行消费,注册中心来管理服务
服务注册中心搭建:
- pom文件导包:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Camden.SR5</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 配置文件中配置
# 解决windows下运行时无法识别主机名的问题
spring.boot.admin.client.prefer-ip=true
#服务名称
spring.application.name=eureka-server
#端口号
server.port=9192
eureka.instance.hostname=127.0.0.1
## 是否注册自身到Eureka服务器
eureka.client.register-with-eureka=false
## 是否从Eureka上获取注册信息
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
#关闭自我保护,保证不可用服务可以及时踢出
eureka.server.enable-self-preservation=false
- 在启动类添加注解@EnableEurekaServer
消费者配置:
- pom配置,直接使用idea创建即可,需要的其他的jar包会自动配置
- 启动类添加@EnableEurekaClient和@EnableFeignClient注解
- 配置文件中配置:
#端口号配置
server.port=8186
#注册中心地址配置
eureka.client.service-url.defaultZone=http://ip:port/eureka/
#注册到注册中心的名称
spring.application.name=client
- 使用
//接口
@FeignClient(value = "provider", fallback = UserServiceHystrix.class)//提供者的注册名称
public interface UserService {
//重写提供者的controller层,必须一致否则访问不通
@RequestMapping(value = “/user/init", method = RequestMethod.GET)
HttpResult getInit(@RequestParam(value = "code",required = false)String code);
}
//需要重写UserService
@Component
public class UserServiceHystrix implements UserService {
@Override
public HttpResult getInit(String code,String name) {
HttpResult httpResult=new HttpResult();
httpResult.setCode(ResultCode.DEF_ERROR.getCode());
httpResult.setMessage(CommonConstant.EXTERNALL_ERROR);
return httpResult;
}
}
说明:
实际上使用Feign是不用重写的,在这里重写的原因是接口中使用了fallback,使用fallback的目的是进
行容错,就是若调用另一个工程时,调用的工程报错了,就会调用重写的就行容错,具体的会在后面的
Hystrix中具体介绍
- 在使用的工程中注入UserService ,调用方法即可
提供者配置:
与消费者配置相同,不需要配置@FeignClient相关内容