SpringCloud中文网
SpringCloud文档
https://springcloud.cc/spring-cloud-netflix.html
https://springcloud.cc/spring-cloud-dalston.html
SpringCloud vs Dubbo
SpringCloud与Dubbo是现在最流行的分布式龙头老大,但是在技术选型的时候二者只能选其一。那么看一些blog和听网上谈论,还是SpringCloud应用更广。
原因据说有几种:
- SpringCloud是微服务架构,而Dubbo只不过是微服务框架
- SpringCloud自身提供了关于微服务的技术,Dubbo与之相比远远不足
- SpringCloud社区火热,能在遇到问题的时候得到社区小伙伴的帮助,也有更多的资料可以供开发参考,而据说Dubbo因为多种原因在12年停止了对Dubbo项目的维护,而在最近SpringCloud变得火热的时候,才重新开启了对Dubbo的维护支持,势要与Cloud分杯羹。
主要不同:SpringCloud基于REST,Dubbo基于RPC(远程过程调用)
微服务架构
微服务架构包含了很多支持的微服务的功能,比如说SpringCloud可以说是微服务架构。有人这样举栗子,买电脑,说是SpringCloud像是一台完整的机器,而Dubbo可以自由拼装,组合。SpringCloud自身实现了很多微服务的技术点,不需要依赖第三方。
SpringCloud
- Spring Cloud Config - 配置管理
- Spring Cloud Bus - 事件,消息总线
- Eureka - 服务发现
- Hystrix - 熔断器
- zuul - 路由监控
- Ribbon - 负载均衡
项目地址
https://github.com/Inverseli/SpringBoot-Learning/tree/master/microservicecloud
project
父项目和两个子模块
(未完 。。。)
项目结构
父项目和四个模块
- microservicecloud - 父工程
- microservicecloud-api - 通用api
- microservicecloud-consumer-dept - 服务消费者
- microservicecloud-eureka - 服务注册中心
- microservicecloud-provider-dept - 服务提供方
note
maven中父pom.xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
dependencyManagement元素,通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
写这个项目的时候,出问题最多的还是版本问题,一定要了解版本之间的兼容问题,不一定出现版本问题的时候就非得降低版本去适应,一个框架会去解决这些问题的,只是说你可能没在官方文档中找到,可以在官方推荐的简单开始项目的例子中找找看,它依赖的是什么版本。遇到问题先不要着急解决,看看问题出在什么地方,看看给定的错误提示
Eureka的自我保护机制
这是正常的时候
这是自我保护的提示
当一个服务因为网络延迟,而没有被发现的时候,eureka不会马上删除微服务,而是会保存服务信息。
它不会从注册列表中剔除因长时间没收到心跳导致租期过期的服务,而是等待修复,直到心跳恢复正常之后,它自动退出自我保护模式。这种模式旨在避免因网络分区故障导致服务不可用的问题
(未完。。。。)