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交稿.不少朋友想先看看源码,现将 ...
随机推荐
- DFS(深度优先搜索)
基本概念 深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法. 沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所在边都己被探寻过或者在搜 ...
- java 数据类型优先级
由低到高:byte,short,char—> int —> long—> float —> double 1. 不能对boolean类型进行类型转换. 2. 不能把对象类型转换 ...
- php 基础 字符型转换整形
示例: 可以得出规律:以有效数字开头的,取有效数字.以非有效数字开头的都转换为0:
- lca最近公共祖先与树上倍增。
https://vjudge.net/contest/295298#problem/A lca 的题目 求任意两点的距离. A题是在线算法,用st表rmq来实现. https://blog.csdn. ...
- Building Ethereum private chain on CentOS
golang安装 yum install golang 查看版本 go version 安装以太坊源代码 Building Geth (command line client) Clone the r ...
- c++写入注册表
一.说明: 注册表是Windows重要组成部分,注册表记录了大量有关电脑软硬件的信息.注册表中的值通过其名称标识.值名称由与键名相同的字符组成.值本身可以是字符串.二进制数据或者是32位无符 ...
- bfs迷宫
链接:https://ac.nowcoder.com/acm/contest/338/BSleeping is a favorite of little bearBaby, because the w ...
- NPC脚本界面自定义美化参数说明
觉得NPC对话界面太单调了 可以自己定义: 在[@main]下面加上 #ACT OPENMERCHANTBIGDLG 参数(WIL文件序号 图片序号 是否可以移动(0,1) 显示位置(0=左上角,1 ...
- 前端 9.16腾讯-2019校园招聘(正式卷)编程题题解(js)
第一题 和谐的数字 牛牛很喜欢研究数字.一天,他发明了一种数字,叫做“和谐的数字”. 和谐的数字定义如下: 定义S(n)为数字n各位数字之和,如果S(n)能够整除n,那么就称n为一个“和谐的数字”. ...
- Flask - Flask高级技巧(Advanced Flask Patterns)
传送门 来自作者的PPT https://speakerdeck.com/mitsuhiko/advanced-flask-patterns?slide=46