SpringCloud微服务分布式笔记(⼆)SpringCloud 微服务分布式
本篇是结合上⼀篇代码进⾏修改学习
Eureka的基本架构
上⼀篇学习了 Eureka的基本学习
Eureka包含两个组件:Eureka Server和Eureka Client
Eureka Server 注册中⼼对 客户端Client 提供: 服务注册与服务发现 功能
各个节点Client启动后,会在EurekaServer中进⾏注册
这样EurekaServer中的服务注册表中将会存储所有可⽤服务节点的信息;
(服务节点的信息可以在界⾯中直观的看到)
EurekaClient是⼀个Java客户端
为了简化与 Eureka Server的交互,
客户端同时也具备⼀个内置的、使⽤轮询(round-robin)负载算法的负载均衡器。
在应⽤启动后,会定期向Eureka Server发送⼼跳(默认周期为30秒)。 如果没有接收到某个节点的⼼跳,
EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)
Eureka Server ⾼可⽤集
微服务在消费远程API时总是使⽤本地缓存中的数据。
因此⼀般来说,即使Eureka Server发⽣宕机,也不会影响到服务之间的调⽤。
但如果EurekaServer宕机时,某些微服务也出现了不可⽤的情况
Eureka Server中的缓存若不被刷新,就可能会影响到微服务的调⽤,甚⾄影响到整个应⽤系统的⾼可⽤。
因此,在⽣成环境中,通常会部署⼀个⾼可⽤的Eureka Server集。
好处:
搭建 Eureka集, 开发应⽤过程中如果 ⼀个Eureka注册中⼼ 不幸发⽣了宕机。
这个时候就算, 某个Eureka Client 发⽣了更改/停⽌… 也会被其它注册中⼼管理记录…使应⽤⾼可⽤
Eureka Server可以通过运⾏多个实例并相互注册的⽅式实现 集 ⾼可⽤部署
Eureka Server实例会彼此增量地同步信息, 从⽽确保所有节点数据⼀致。
节点之间相互注册是Eureka Server的默认⾏为。
(上图:三个注册中⼼之间的集操作…注册中⼼之间数据同步, 共同管理 provider 和 comsumer ⼀个挂了也不会影响操作..)搭建 Eureka Server⾼可⽤集
复制以前写的 eureka-server注册中⼼
为eureka-server2 为了⽅便操作之间copy
修改名字…
修改l 中的项⽬名eureka-server2
主Maven⼯程l中添加依赖~
这个学过Maven的都清除不过多解释…Maven主l
<!-- Maven⽗⼯程包含管理的⼦⼯程... -->
<modules>
<module>common_api</module>
<module>common_orderService</module>
<module>common_userService</module>
<module>eureka-server</module>
<module>eureka-server2</module><!-- ⼿动添加刷新Maven以将copy的⼯程添加⾄项⽬中... --> <module>import-demo</module>
</modules>
ok,到这⾥⼤致就⼜ 搭建好了⼀个注册中⼼了
修改注册中⼼的端⼝/配置:
接下来就是配置⼀下注册中⼼了…
eureka-server2 的.yml
server:
port:7002 #修改...注册中⼼的端⼝; (要知道端⼝是唯⼀的...)
spring:
application:
name: eureka-server #注册中⼼应⽤名称,这⾥不需要修改...
#配置注册中⼼....
eureka:
client:
service-url:#注册中⼼对外暴漏的注册地址... 逗号分隔,不要有空格!!
defaultZone: localhost:7002/eureka/,localhost:7001/eureka/
fetch-registry:false
register-with-eureka:false
eureka-server 的.yml
server:
port:7001 #注册中⼼的端⼝;
spring:
application:
name: eureka-server #注册中⼼应⽤名称,这⾥不需要修改...
#配置注册中⼼....
eureka:
client:
service-url:#注册中⼼对外暴漏的注册地址...
defaultZone: localhost:7001/eureka/,localhost:7002/eureka/
fetch-registry:false
register-with-eureka:false
测试
启动eureka-server 注册中⼼
启动common_orderService 订单模块 | common_userService⽤户模块
启动eureka-server2 注册中⼼
关闭7001 注册中⼼,测试并不会影响使⽤…
注意:
因为关闭了注册中⼼, Eureka的客户端,会检测 ⼀个注册中⼼宕机 ⽽出异常!
但并不会影响使⽤!
ok,Eureka⽣效!
Eureka集总结:
创建两个除了端⼝port外,基本⼀致的注册中⼼
给其.yml配置中两个注册中⼼相互依赖:
defaultZone: localhost:7002/eureka/,localhost:7001/eureka/
Eureka源码解析
SpringBoot中的⾃动装载
ImportSelector接⼝是Spring导⼊外部配置的核⼼接⼝
在SpringBoot的⾃动化配置和@EnableXXX(功能性注解)中起到了决定性的作⽤。
⾸先ImportSelector 是⼀个接⼝
作⽤:
当在@Configuration标注的Class上
使⽤@Import引⼊了⼀个ImportSelector实现类后
会把实现类中, ⽅法返回的所有 Class名称都定义为bean。
public interface ImportSelector {
//实现接⼝需要重写⽅法, 返回值是⼀个数组... 存放 class类名的数据;
//在⼀个@Configuration类中使⽤@Import引⼊该接⼝的实现类;
//会将实现类,实现⽅法的返回值所有的 class名都定义为
String[]selectImports(AnnotationMetadata var1);
}
DeferredImportSelector 接⼝和 ImportSelector
DeferredImportSelector 是 ImportSelector的⼦接⼝…DeferredImportSelector.Java接⼝
public interface DeferredImportSelector extends ImportSelector {
....
springcloud难学吗}
查看:
进⼊ @SpringBootApplication——进⼊——@EnableAutoConfiguration
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})//进⼊AutoConfigurationImportSelector.class
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY ="ableautoconfiguration";
Class<?>[]exclude()default{};
String[]excludeName()default{};
}
进⼊——AutoConfigurationImportSelector.class
DeferredImportSelector作⽤:
DeferredImportSelector接⼝继承ImportSelector
它和ImportSelector的区别在于装载bean的时机上
DeferredImportSelector需要等所有的@Configuration都执⾏完毕后才会进⾏装载…⽐ImportSelector慢⼀定...使⽤ImportSelector ⾃定义⼀个@Eablexx启动注解:
实现:@Eabelexxx启动类注解,当使⽤注解才可以在程序中使⽤这个类, 不@Eable启动则不能使⽤类即⽅法()...
这次加⼊⼀个模块 import_Eable
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论