# springcloud **Repository Path**: qys123456/springcloud ## Basic Information - **Project Name**: springcloud - **Description**: Eureka、Ribbon、Feign、Hystrix、Zuul,五大组件,已更新完毕 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 1 - **Created**: 2020-04-28 - **Last Updated**: 2021-03-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springcloud #### 介绍 Eureka、Ribbon、Feign、Hystrix、Zuul,五大组件 #### 软件架构 软件架构说明 #### 安装教程 直接导入使用eclipse导入maven工程就可以运行了 #### 使用说明 1. Eureka Eureka 作为注册中心就必须要有服务端和消费端,项目中服务端有2个项目 user-8001和user-8002(user-8001-hystrix也可以),客户端有 consumer-users-80和consumer-user-fieigen 在刚测试eureka的时候使用consumer-users-80就可以了,测试步骤如下: 1,启动7001和7002 2,启动8001和8002 3,启动80 打开eureka控制面板,可以看见有几个注册中心,有几个服务,通过80访问就能发现服务是随机访问的,就实现了lb(随机模式) 2. Ribbon Ribbon 用来做lb,使用条件必须有服务端注册中心和消费端,Ribbon在消费端进行lb,可以使用@RibbonClient-->configuration指定自定义的lb模式 lb 顶层接口是IRule ![输入图片说明](https://images.gitee.com/uploads/images/2020/0516/223204_d53bb009_602901.png "微信图片_20200516223147.png") 测试过程 1,启动7001和7002 2,启动8001和8002 3,启动80 responsetimeweight的算法如下 1 根据LoadBalancerStats中记录的每个实例的统计信息,累计所有实例的平均响应时间,得到总的平均响应时间totalResponseTime,该值用于后面的计算。 2 为负载均衡器中维护的实例清单逐个计算权重(从第一个开始),计算规则为: weightSoFar+totalResponseTime-实例平均相应时间,其中weightSoFar初始化为0,并且 每计算好一个权重需要累加到weightSoFar上供下一次计算使用。 示例:4个实例A、B、C、D,它们的平均响应时间为10,40,80,100,所以总的响应时间为 230,每个实例的权重为总响应时间与实例自身的平均响应时间的差的累积所得,所以实例A,B,C,D的权重分别为: A:230-10=220 B:220+230-40=410 C:410+230-80=560 D:560+230-100=690 需要注意的是,这里的权重值只是表示各实例权重区间的上限,并非某个实例的优先级,所以不是数值越大被选中的概率就越大。而是由实例的权重区间来决定选中的概率和优先级。 A:[0,220] B:(220,410] C:(410,560] D:(560,690) 实际上每个区间的宽度就是:总的平均响应时间-实例的平均响应时间,所以实例的平均响应时间越短 ,权重区间的宽度越大,而权重区间宽度越大被选中的概率就越大。 3. Feign Feign 使用了 ribbon 来做负载,区别是feign是接口形式的调用,使用@FeignClient(name = "springcloud-provider-users")就指定了服务,然后把接口注入到使用的地方就可以使用了 测试过程 1,启动7001 2,启动8001 3,启动feign项目 4. Hystrix Hystrix 用来做服务的熔断和降级, 熔断指的是服务在异常时候的处理 降级是指在特殊情况下关闭服务并且让客户端仍然能正常相应 开启@EnableCircuitBreaker后使用@HystrixCommand就可以配置熔断器了,主要是针对服务端 降级是针对客户端,是客户端在无服务时能做出相应,需要在@FeignClient中配置fallbackFactory 测试过程 1,启动7001 2,启动8001-hystrinx 3,启动feign项目 访问 /users/get/? 当参数无法找到的时候后走fallbackMethod的逻辑,就达到了服务熔断的效果 4, 关闭项目8001-hystrinx 访问 /consumer/get/?当参数可以查出数据但是服务不存在的时候就会走fallbackFactory中指定的逻辑 5. Zuul Zuul 在这里起到了网关的作用 测试过程 1,启动7001 2,启动8001 3,启动zuul 这里说一下zuul的配置,默认不配置是直接用服务名访问的 ip:port/springcloud-provider-users/user/get/1 这里添加routes配置就可以替换掉服务名变成 ip:port/provider/user/get/1 添加ignored-services配置后就只能通过没有忽略的路径访问 添加prefix前缀就必须加上前缀访问,注意这里的/ 6. config 远程配置 远程配置可以把配置放在远程,各项目拉取就可以了 测试过程 1 启动3344 这里作为服务端,负责链接git提供给其他项目使用 2 启动3355 测试,这里需要有的bootstrap.yml 这个文件先于application.yml执行,可以用来给application.yml配置属性,类似于继承关系,这时候就可以直接访问远程文件了 遇见问题汇总 1 不会创建class, 因为class必须放在对于的目录里面,必须设置好source才可以 2 provider 无法导入api的文件,是因为无法没有创建java文件 3 idea不熟練,換回了eclipse,速度變快了很多