spring cloud demo记录

参考: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.

测试了好几遍都是这样!

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值