A 类比青楼中的嫖客, B 类比青楼女子,注册中心呢就相当于青楼中的妈咪 一般 嫖客服务一来,就肯定直接点名春花还是秋月呀,直接问妈咪要花魁就行
◆ 客户端发现
◆ 服务端发现
我们这里使用Eureka
◆ 基于Netflix Eureka做了二次封装 ◆ 两个组件组成:
首先需要一个Eureka服务注册表。 使用Spring Cloud的@EnableEurekaServer来建立注册表,其他应用程序可以与之通信。 这是一个常规的Spring Boot应用程序,其中添加了一个注解(@EnableEurekaServer)以启用服务注册表。
使用@EnableEurekaServer
就可以让应用变为Eureka服务器,这是因为spring boot封装了Eureka Server,让你可以嵌入到应用中直接使用
注册表启动时,它将抱怨(带有stacktrace)注册表没有可连接的副本节点。在生产环境中,需要多个注册表实例。 默认情况下,注册表还会尝试自行注册。 在本地使用此注册表时,最好将此注册表放在单独的端口上。
这是因为该应用虽然是 Server 端,但也同时是 Client 端,也需要一个注册中心将自己注册进去 为消除其异常,修改下配置
启动仍旧报错,其实正常问题,因为服务端自己又是 Server, 又是 Client, 服务端未启动完成时,客户端肯定是无法找到服务端的 但是 eureka 的服务端/客户端采用心跳通信方式
可看到地址已随配置被改变
@EnableDiscoveryClient
注解
这通过META-INF/spring.factories
查找DiscoveryClient
接口的实现
Discovery Client的实现将在org.springframework.cloud.client.discovery.EnableDiscoveryClient
键下的spring.factories
中添加一个配置类。
DiscoveryClient
实现的示例是Spring Cloud Netflix Eureka,Spring Cloud Consul发现和Spring Cloud Zookeeper发现。默认情况下,DiscoveryClient
的实现将使用远程发现服务器自动注册本地Spring Boot服务器。可以通过在@EnableDiscoveryClient
中设置autoRegister=false
来禁用此功能。
Eureka看明白了这一点,因此在设计时就优先保证可用性
我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接宕机。也就是说,服务注册功能对可用性的要求要高于一致性
!
如果Eureka服务节点在短时间里丢失了大量的心跳连接(可能发生了网络故障),那么这个 Eureka节点会
Eureka的哲学是,同时保留“好数据”与“坏数据”总比丢掉任何数据要更好
如果一台 eureka 宕机了咋办呢,为了实现高可用, 如果直接加一台服务器并无任何卵用,
发现 client 在1,2同时都注册成功了! 假如此时 eureka1宕机了,会发生什么呢?
对于我们的本地开发环境,部署一个 E 即可,不再集群
◆ @EnableEurekaServer @EnableEurekaClient
◆ 心跳检测、健康检查、负载均衡等功能
◆ Eureka的高可用,生产上建议至少两台以上
◆ 分布式系统中 ,服务注册中心是最重要的基础部分