Eureka是一个注册中心,它用于微服务;
Zookeeper也是一个注册中心,这两个注册中心的区别
c:数据的一致性:注册中心的集群数据是一致的
zookeeper集群的数据是一致的
Eureka只能保证最终一致性,不能保证强一致性。由于异步性,Eureka Client从Eureka Server获取的微服务节点会有失效的。这样,当访问失效的节点就会产生错误。所以开发的时候最好采用重试机制减少出错的可能。是最终一致性更加趋向于强一致性。
a:服务的可用性
zookeeper中的主机宕机后,从机间会选举出一个主机,在选举的过程中,由于没有主机,所以在这段时间内不能访问zookeeper,选举出一个主机(需要120秒)后才能对外提供服务
Eureka则没有主从机的概念,只要有一天机器存活着就能访问;
p:分区的容错性(在集群里面的集群,因为网络原因,机房的原因,可能导致数据不会里面同步),它在分布式 必须需要实现的特性!
zookeeper强调数据的一致性,和分区的容错性,cp
Eureka强调的是服务的可用性,和分区的容错性,ap
Eureka
Eureka-server的创建
创建一个springboot项目,只需依赖一个eureka,在启动类上需添加一个@EnableEurekaServer注解,写配置文件
创建springboot项目:
2. 选择依赖
3.在启动类上添加注解@EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServiceApplication.class, args);
}
}
- 写配置文件
server:
port: 8761
spring:
application:
name: eureka-service
- 启动测试,访问注册中心
如果想改Status里面的名字,只需修改配置文件的名称
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
instance:
instance-id: ${spring.application.name}:${server.port} # 服务的名称
再次启动,访问注册中心,可以看到Status的名字已经修改了
将鼠标放到Status的名字上,浏览 器的左下角会出现一个地址,它默认显示的是主机的名称
如果想让它显示ip地址,只需修改配置文件,添加prefer-ip-address: true # 优先显示地址
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
instance:
instance-id: ${spring.application.name}:${server.port} # 服务的名称
prefer-ip-address: true # 优先显示地址
我们可以看到这个注册中心自己注册了自己,我们观察源码发现,eureka默认的配置会向8761 的注册中心注册自己。
如果不想自己注册自己,只需修改配置文件
register-with-eureka: false #是否把自己注册到Eureka上面
fetch-registry: false # 是否从Eureka上面拉取服务列表
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
instance:
instance-id: ${spring.application.name}:${server.port} # 服务的名称
prefer-ip-address: true # 优先显示地址
client:
register-with-eureka: false #是否把自己注册到Eureka上面
fetch-registry: false # 是否从Eureka上面拉取服务列表
创建Eureka-Client
和创建Eureka-Server过程很像,Eureka-Client的启动类上不需要添加eureka注解
创建springboot项目
添加依赖
修改配置文件
server:
port: 8080
spring:
application:
name: eureka-client-a
eureka:
instance:
instance-id: ${spring.application.name}:${server.port} # 服务的名称
prefer-ip-address: true # 优先显示地址
client:
serviceUrl:
defaultzone: http://peer1:8761/eureka # 客户端注册的注册中心的地址
集群的原理和架构
搭建集群,注册的注册中心的地址间使用逗号分隔
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
instance:
instance-id: ${spring.application.name}:${server.port} # 服务的名称
prefer-ip-address: true # 优先显示地址
client:
serviceUrl:
defaultzone: http://peer1:8761/eureka, http://peer2:8762, http://peer3:8763 # 客户端注册的注册中心的地址
启动项目,访问其中一个注册中心
小问题:
在之前的版本 里面 :
service-url的地址,需要自己手动改为:serviceUrl,否则集群搭建 不成功!