文章目录
一、什么是Eureka
- Eureka是一个基于REST的服务,主要用于AWS云中的定位服务,以实现中间层服务器的负载平衡和故障转移
- 在 Spring Cloud 微服务架构中通常用作注册中心
- 我们称这个服务为 Eureka Server,还有一个与之交互的客户端称之为 Eureka Client
- Eureka架构:
二、创建Eureka模块
- 导入依赖
- 编写配置文件
server:
port: 7001
#Eureka配置
eureka:
instance:
hostname: hostname #Eureka服务端的实例名称
client:
register-with-eureka: false # 表示是否向eureka注册中心注册自己
fetch-registry: false #fetch-registry如果为false,则表示自己为注册中心
service-url:
# 单机:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# 集群(关联):defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
- 启动类注解开启功能 @EnableXXX
- 进去Eureka客户端 http://localhost:7001/
三、服务提供者
服务注册
- 注入依赖
- 配置文件 配置Eureka
#Eureka的配置,服务注册到哪里
eureka:
client:
service-url:
defaultZone: http://hostname:7001/eureka/
instance:
instance-id: springcloud-provider-dept8001 # 修改eureka上的默认描述信息!
prefer-ip-address: true # true,可以显示服务的IP地址 ~
- 配置启动类 @EnableEurekaClient//服务启动后自动注册到Enable中
- 查看是否注入进去
信息配置(扩展)
- 注入actuator…依赖
- 配置文件配置info
#info配置
info:
app.name: kuangshen-springcloud
company.name: blog.kuangstudy.com
- 客户端可以查看用户信息
获取服务信息(扩展)
- controller层:
//获取一些配置的信息,得到具体的微服务!
@Autowired
private DiscoveryClient client;
//注册进来的微服务~,获取一些消息~
@GetMapping("/dept/discovery")
public Object discovery(){
//获取微服务列表的清单
List<String> services = client.getServices();
System.out.println("discovery=>services:"+services);
//得到一个具体的微服务信息,通过具体的微服务id,applicaioinName;
List<ServiceInstance> instances = client.getInstances("SPRINGCLOUD-PROVIDER-DEPT");
for (ServiceInstance instance : instances) {
System.out.println(
instance.getHost()+"\t"+
instance.getPort()+"\t"+
instance.getUri()+"\t"+
instance.getServiceId()
);
}
return this.client;
}
- 启动类配置EnableDisCoveryClient
自我保护机制(拓展)
某一时刻一个微服务不能用了,erueka不会立刻清理,依旧会对该微服务的信息进行保存。
四、Eureka集群配置
- 多创建几个Eureka模块7001、7002、7003
- 修改配置文件、修改包名等
- 每个Eureka模块的配置文件:
server:
port: 7001
#Eureka配置
eureka:
instance:
hostname: eureka7001.com #Eureka服务端的实例名称
client:
register-with-eureka: false # 表示是否向eureka注册中心注册自己
fetch-registry: false #fetch-registry如果为false,则表示自己为注册中心
service-url:
# 单机: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# 集群(关联):
defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
- 服务提供端配置文件
#Eureka的配置,服务注册到哪里
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
instance-id: springcloud-provider-dept8001 # 修改eureka上的默认描述信息!
prefer-ip-address: true # true,可以显示服务的IP地址 ~
CAP原则及与zookeeper的对比
- CAP:
- C:强一致性
- A:可用性
- P:分区容错性
- zookeeper保证的是CP
因为选取Leader的时候属于不可用状态,所以不能保证可用性
- Eureka保证的是AP