Spring Cloud 从入门到入门
参考:https://blog.csdn.net/hellozpc/article/details/83692496
参考:https://www.fangzhipeng.com/spring-cloud.html
Spring Cloud
spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理事件总线、全局锁、决策竞选、分布式会话等。运行环境就简单,另外说明的是
spring cloud 是基于spring boot 的。
1.1 注册中心
spring cloud netflix 的 eureka 是一个服务注册和发现模块。包括服务端与客户端。启动一个注册中心,只需要一个注解 @EnableEurekaServer ,这个注解注释到 spring boot 的启动工程类上
@EnableEurekaServer
@SpringBootApplication
public class EurekaserverApplication { public static void main(String[] args) {
SpringApplication.run(EurekaserverApplication.class, args);
}
}
Eureka 是一个高可用的组件,没有后端缓存,每一个实例注册之后都要向注册中心发送心跳,在默认情况下eureka server 也是一个 eureka client ,必须指定一个server.
application.yml 配置
server:
port:
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
1.2 创建一个服务提供者( eureka client)
当 client 向 server 注册时,它会提供一些元数据,例如主机和端口,url 。每个 client 实例接受心跳消息,如果心跳超时,则通常将该实例从注册服务中删除。
eureka client 需要依赖 spring-boot-start-web
@SpringBootApplication
@EnableEurekaClient
public class ServiceHiApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceHiApplication.class, args);
}
}
2.1 ribbon 是一个负载均衡客户
可以很好的控制 http 和 tcp 的一些行为。 Feign 默认集成了 ribbon首先需要导入ribbon 的依赖,在工程的启动类中通过 @EnableDiscoveryClient 向服务中心注册。并且向程序的 ioc 注入一个 bean ,
restTemplate 并通过@LoadBalance 注解表明这个 restTemplate 开启负载均衡的功能。
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceRibbonApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceRibbonApplication.class, args);
} @Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
} }
@Service
public class HelloService { @Autowired
RestTemplate restTemplate; public String hiService(String name) {
return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);
}
}
3.1 Feign 是一个声明式的 http 客户端
它使得些Htpp 客户端变得简单。使用 Feign 只需要创建一个接口并注解。它具有可拔插的注解特性,可使用feign 注解和 JAX-RS 注解。Feign 支持可拔插的编码和解析器。Feign 默认集成了Ribbon ,并和Eureka 结合,默认实现了负载均很的效果。
- Feign 是采用基于接口的注解
- Feign 整合了ribbon
需要在程序的启动类上加 @EnableFeignClients 注解开启 Feign 的功能。
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceFeignApplication { public static void main(String[] args) {
SpringApplication.run(ServiceFeignApplication.class, args);
}
}
定义一个Feign 接口,通过@FeignClient("服务名")来指定调用哪个服务。
@FeignClient(value = "service-hi")
public interface SchedualServiceHi {
@RequestMapping(value = "/hi",method = RequestMethod.GET)
String sayHiFromClientOne(@RequestParam(value = "name") String name);
}
4.1 Hystrix
在微服务中,根据业务来拆分成一个个的服务,服务与服务之间可以互相调用RPC ,在spring cloud 可以用 RestTemplate + Ribbon 和 Feign 来调用。为了保证高可用,单个服务通常会集群部署,由于网络的原因或者自身的原因,服务并不能保证
100% 可以。如果单个服务出问题,调用这个服务的线程会阻塞,此时若大量的请求涌入,Servlet 容器的线程资源会被消耗完毕,导致服务瘫痪。服务于服务之间的依赖性,故障会传播,对整个微服务系统造成严重的后果,这就是服务故障的“雪崩”效应
为了解决该问题,断路器提出来
Netflix 开源 Hystrix 组件,实现了断路器模式,Spring Cloud 对这一组件进行了整合。在微服务架构中,一个请求需要调用多个服务是常见的

较底层的服务如果故障,会导致连锁故障。当对特定的服务调用到达一个阈值(Hystrix 是 5 秒20次)断路器将会被打开。

断路器打开后,可用避免连锁故障, fallback 方法可直接返回一个固定的值。
在程序的启动类加@EnableHystrix 注解开启 Hystrix
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
public class ServiceRibbonApplication { public static void main(String[] args) {
SpringApplication.run(ServiceRibbonApplication.class, args);
} @Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
} }
在方法上加@HystrixCommand 注解,该注解对方法创建了熔断功能,并指定熔断方法。
@Service
public class HelloService { @Autowired
RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "hiError")
public String hiService(String name) {
return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);
} public String hiError(String name) {
return "hi,"+name+",sorry,error!";
}
}
4.2 Feign 中使用断路器
Feign 是自带断路器的,需要配置开启断路器,默认关闭
feign.hystrix.enabled=true
@FeignClient(value = "服务名称",fallback = SchedualServiceHiHystric.class)
public interface SchedualServiceHi {
@RequestMapping(value = "/hi",method = RequestMethod.GET)
String sayHiFromClientOne(@RequestParam(value = "name") String name);
}
创建类继承接口,重写接口的方法
@Component
public class SchedualServiceHiHystric implements SchedualServiceHi {
@Override
public String sayHiFromClientOne(String name) {
return "sorry "+name;
}
}
5.1 Zuul
在微服务架构中,需要几个基础的服务治理组件,包括服务注册发现、服务消费、负载均衡、断路器、智能路由、配置管理等共同组成一个简单的微服务系统。

Zuul 的主要功能是路由 转发和过滤器,路由功能是微服务的一部分,比如 /api/user/转发到 user 服务 。api/shop 转发到shop 服务。zuul默认和ribbon 结合实现了负载均衡的功能。
Spring Cloud 从入门到入门的更多相关文章
- Spring Cloud实战之初级入门(六)— 服务网关zuul
目录 1.环境介绍 2.api网关服务 2.1 创建工程 2.3 api网关中使用token机制 2.4 测试 2.5 小结 3.一点点重要的事情 1.环境介绍 好了,不知不觉中我们已经来到了最后一篇 ...
- Spring Cloud实战之初级入门(五)— 配置中心服务化与配置实时刷新
目录 1.环境介绍 2.配置中心服务化 2.1 改造mirco-service-spring-config 2.2 改造mirco-service-provider.mirco-service-con ...
- Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控
目录 1.环境介绍 2.服务监控 2.1 加入依赖 2.2 修改配置文件 2.3 修改启动文件 2.4 监控服务 2.5 小结 3. 利用hystrix实现消费服务熔断 3.1 加入服务熔断 3.2 ...
- 基于Spring Cloud的微服务入门教程
(本教程的原地址发布在本人的简书上:http://www.jianshu.com/p/947d57d042e7,若各位看官有什么问题或不同看法请在这里或简书留言,谢谢!) 本人也是前段时间才开始接触S ...
- Spring Cloud - Nacos注册中心入门单机模式及集群模式
近几年微服务很火,Spring Cloud提供了为服务领域的一整套解决方案.其中Spring Cloud Alibaba是我们SpringCloud的一个子项目,是提供微服务开发的一站式解决方案. 包 ...
- spring cloud 学习(3) - feign入门
feign 是一个让rest服务调用更简洁的开源项目,很多介绍文章或书也称它为声明式REST调用.传统的web service中,通过引用wsdl来自动生成一些client的代理类(或stub代码), ...
- Spring Cloud实战微服务入门
1.spring cloud是什么? 是一个快速构建分布式系统的工具集,构建于Spring Boot之上 2.spring cloud 的特点 约定优于配置 开箱即用.快速启动 适用于各种环境 轻量级 ...
- 替代 Hystrix,Spring Cloud Alibaba Sentinel 快速入门
提起 Spring Cloud 的限流降级组件,一般首先想到的是 Netflix 的 Hystrix. 不过就在2018年底,Netflix 宣布不再积极开发 Hystrix,该项目将处于维护模式.官 ...
- 官方文档中文版!Spring Cloud Stream 快速入门
本文内容翻译自官方文档,spring-cloud-stream docs,对 Spring Cloud Stream的应用入门介绍. 一.Spring Cloud Stream 简介 官方定义 Spr ...
- 《Spring Cloud与Docker微服务架构实战》配套代码
不才写了本使用Spring Cloud玩转微服务架构的书,书名是<Spring Cloud与Docker微服务架构实战> - 周立,已于2017-01-12交稿.不少朋友想先看看源码,现将 ...
随机推荐
- 搭建离线下载aria2 树莓派下搭建,以及图形化界面AriaNG
请参考链接 https://www.htcp.net/3652.html https://www.zrj96.com/post-296.html Aria2自动更新BT Tracker服务器列表的方法 ...
- Mysql数据库内置功能之函数
一 函数 MySQL中提供了许多内置函数,例如: 一.数学函数 ROUND(x,y) 返回参数x的四舍五入的有y位小数的值 RAND() 返回0到1内的随机值,可以通过提供一个参数(种子)使RAND( ...
- String - 字符串分割操作
如果我想将一个字符串按照每8位一组分为若干个块,然后存储在一个byte[ ]数组中,我首先需要确定这个byte数组的长度,但由于我无法确定这个字符串的长度是否可以被8整除,所以无法直接判断,因此需要对 ...
- JavaScript 事件 继承链 元素和结点
继承链: HTMLElement->Element->Node->EventTarget->Object document和body:document代表整个文档,body是指 ...
- Map-HashMap 与 IF 判断内存占用对比
HashMap与IF判断内存占用对比,事实证明,Map对象在以下情况确实比IF判断占用内存低. HashMap占用内存:13000 package com.taiping.bky; import ja ...
- WLC license管理
关于控制器的license,可以参考对应平台的Datasheet: Cisco 2504 WLC Cisco 3504 WLC Cisco 5508 WLC Cisco 5520 WLC Cisco ...
- AcWing - 156 矩阵(二维哈希)
题目链接:矩阵 题意:给定一个$m$行$n$列的$01$矩阵$($只包含数字$0$或$1$的矩阵$)$,再执行$q$次询问,每次询问给出一个$a$行$b$列的$01$矩阵,求该矩阵是否在原矩阵中出现过 ...
- 【PAT甲级】1092 To Buy or Not to Buy (20 分)
题意: 输入两行字符串,如果第二行字符串包含于第一行字符串,输出"Yes"以及第一行字符串减去第二行字符串剩余的字符个数,否则输出"No"以及第二行字符串中不在 ...
- 【Python协程的实现】
" 补充:数据安全问题 进程: 多个进程操作同一个文件,会出现数据不安全 线程: 多个线程操作同一个全局变量,会出现数据不安全 对于共享的数据操作: 如果是 += *= /= -= 操作,都 ...
- Ansible playbooks(任务、角色、模板、变色器、)
playbooks配置文件: [root@ansible ~]# vim /etc/ansible/hosts [test01] 192.168.200.114 [test02] 192.168.20 ...