spring cloud demo记录

来源:互联网 发布:java oa项目源码 编辑:程序博客网 时间:2024/05/23 20:01

参考:http://blog.csdn.net/forezp/article/details/70148833


本文demo 参考以上文章进行搭建 ,很详细的一篇文章。

本文只对不同的地方,遇到的小坑  和一些想法写一下。


文章里环境用的IDE  JDK8 maven4.0   

我这里用的是STS 4.9  剩下都一样


主要搭建服务 分别为 eureka  服务注册 和发现 

ribbon + restTemplate 实现负载均衡

feign  默认集成了ribbon,也是实现了负载均衡,所以用feign的比较多

hystrix 断路器,当某个服务出现问题时,会返回一个固定值,避免出现底层服务的连锁故障。

zuul 路由功能,功能和nginx差不多,主要功能还是代理转发和过滤。相比Nginx是自带负载均衡,而zuul是配合eureka,feign进行负载均衡

config 配置中心,利用集群实现配置的统一管理

Bus 消息总线,中间利用轻量级 AMQ 通过API来实现配置更改后的热部署/bus/refush 和实现服务之间的通信


参考文章中整体项目为 maven project ,包含众多model模块来实现。每个模块都实现自己的功能。

我自己进行了一个依赖抽取到父类pom,子模块依赖自己的依赖就可以了。

依旧Parent为 spring-boot-starter-parent 只不过这次的版本用的1.5.2

设置项目编码格式 和JDK 版本为 1.8

设置3个公用的依赖 分别为 eureka  boot-start-web   boot-start-test 

余下子模块项目分别设置自己的自有自来即可,不用像参考文章里那么复杂,每个子模块 pom都是一大堆。

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.demo</groupId>  <artifactId>springCloudDemo</artifactId>  <version>1.0-SNAPSHOT</version>  <packaging>pom</packaging>  <name>Parent Project</name><modules><module>ribbon</module><module>eurekaServer</module><module>eurekaClient</module><module>feign</module><module>zuul</module><module>configServer</module><module>configClient</module></modules><parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.2.RELEASE</version>        <relativePath/>     </parent>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>        <java.version>1.8</java.version>    </properties>    <dependencies>   <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-eureka</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>  </dependencies>     <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.springframework.cloud</groupId>                <artifactId>spring-cloud-dependencies</artifactId>                <version>Dalston.RC1</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build>    <repositories>        <repository>            <id>spring-milestones</id>            <name>Spring Milestones</name>            <url>https://repo.spring.io/milestone</url>            <snapshots>                <enabled>false</enabled>            </snapshots>        </repository>    </repositories>    </project>

剩下的代码 基本就是跟着参考来。

euraka + feign 基本实现了zookper的负载均衡+服务注册发现功能,

在分布式系统领域有个著名的CAP定理(C-数据一致性;A-服务可用性;P-服务对网络分区故障的容错性,)

区别在于 zookper被设计为CP模式,即任何时刻对ZooKeeper的访问请求能得到一致的数据结果,同时系统对网络分割具备容错性

euraka 则设计为AP模式,各自为战,无法保证数据的一致性,但是在可用性和容错性上要比zookper要更健壮。

如果一个服务器挂机,那么euraka 为自动将请求通过负载均衡转移到有效的请求节点上,如果都挂了,也有断路器的存在 返回一个固定值,总比zookper的timeOut友好的多

euraka 想比于zookper,少了一个选举leader的过程,减少了维护,也有自动刷新缓存和发布服务等对外暴露的接口。



注:参考文章中 第七章 高可用的Config配置中心在 配置 config server 和 config client 在启动类上缺少@EnableEurekaClient 注解,否则无法在eureka中注册服务。


出现过的坑:

在测试zuul demo 过程中,先后启动 eureka-server,eureka-client,ribbon,feign,最后启动zuul,启动成功,查看eureka管理界面有每个项目的成功情况,但是刚启动zuul有几秒的时间 访问任何请求都会报500的错误,提示没有对应的 ribbo 或者 feign服务,过几秒自己就好了。可以正常负载均衡访问 eureka-client了, 很不友好。

然后关闭eureka-client进程,正常应该及时启动断路器,返回断路器的固定值信息,

但是关闭后有2分钟左右时间 请求访问都是报错,time out and no fallMethod back.

测试了好几遍都是这样!

蛋疼哦!!!有遇到这个问题解决了的嘛,请分享一下




原创粉丝点击