前言
Eureka是cs架构,需要新建一个工程作为serve端(注册中心),需要注册服务到注册中心的web工程作为Client端。EureKa和ZK做比较:ZK集群满足的是CP,当leader挂掉的时候整个集群是不可用的,需要重新选举leader,EureKa集群满足的是AP,高可用!
1.serve(注册中心)搭建
1.引入maven依赖
<!--eureka-server服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
2.配置yml文件,注册中心相关信息配置
eureka:
instance:
hostname: localhost
client:
#不检索服务,只是注册服务
fetch-registry: false
#不向注册中心注册自己
register-with-eureka: false
service-url:
#设置注册中心的地址(不是eureka的管理界面的地址,管理界面地址是ip:端口)
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
3.启动类上加注解@EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7001.class, args);
}
}
4.测试,访问注册中心管理界面。ip:端口
2.服务注册到注册中心
1.引入maven依赖
<!-- 将微服务provider侧注册进eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
2.配置yml文件,指定注册中心地址以及服务名称
spring:
application:
#指定微服务注册到注册中心的名称
name: dept-provider-8001
eureka:
client:
service-url:
#指定注册中心的地址
defaultZone: http://localhost:7001/eureka
3.启动类上加注解@EnableEurekaClient
@SpringBootApplication
@EnableEurekaClient
public class ProviderMain8001 {
public static void main(String[] args) {
SpringApplication.run(ProviderMain8001.class, args);
}
}
4.测试,查看注册中心管理界面是否有服务的实例(服务名称)
3.Eureka自我保护机制
当某个服务下线后(因为网络故障访问不到也好),Eureka不会立即将该服务从注册中心剔除,会保留服务信息,等待服务的修复或者上线或者网络恢复(Eureka遵循AP原则,需要高可用),自我保护机制可以通过配置服务端来关闭,但是不推荐。
4.EureKa集群搭建
一个注册中心挂掉会导致服务不可用,所以需要多个注册中心达到高可用。
1.多创建几个EureKa服务端(注册中心)工程
2.修改EureKa服务端(注册中心)yml
server:
port: 7001
eureka:
instance:
hostname: eurekaServer7001
client:
#不检索服务,只是注册服务
fetch-registry: false
#不向注册中心注册自己
register-with-eureka: false
service-url:
# #设置注册中心的地址(不是eureka的管理界面的地址,管理界面地址是ip:端口)
## defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#集群搭建,这里只需要配置其他注册中心地址就好了
defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
3.修改Eureka客户端(服务提供方)的yml文件
server:
port: 8001
spring:
application:
#指定微服务注册到注册中心的名称 application栏
name: dept-provider-8001
eureka:
client:
service-url:
#指定注册中心的地址
# defaultZone: http://localhost:7001/eureka 单机版的注册中心
#这里其实只需要配置一个注册中心就行了,服务会同步到集群中的其他注册中心,但是不能保证你注册的这个服务端是OK的,所以多些几个
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
#指定服务在注册中心管理界面显示的名称 status栏
instance-id: dept-provider-8001
#显示服务所在机器的ip
prefer-ip-address: true
4.测试,访问Eureka集群中的任意一个