当前位置: 首页 > news >正文

Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel

自 Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态后,我们开始制作《Spring Cloud Alibaba迁移指南》系列文章,向开发者提供更多的技术选型方案,并降低迁移过程中的技术难度。

第一篇,我们对Hystrix、Resilience4j 和 Sentinel 三个开源项目进行对比,并探讨如何使用一行代码这种极简的方式,将Hystrix迁移到Sentinel。

Hystrix 自从前段时间 宣布停止维护之后,社区推荐了 resilience4j。这 3 款产品各有优劣势,具体的功能差异参考下表(该表来源 Sentinel Wiki):
图片描述
目前 Sentinel 在 Spring Cloud Alibaba 项目中已经适配了 Spring Cloud 体系,可以用来完全替代 Hystrix 的功能了。

Spring Cloud Alibaba Sentinel 功能介绍
Spring Cloud Alibaba Sentinel 主要是为了整合 Sentinel 和 Spring Boot/Cloud 技术栈。目前完成了如下功能:

自动适配 Servlet 容器。只需要配置 url-pattern(默认拦截所有请求),即可对拦截的这些 url 进行限流降级操作
整合了 RestTemplate,使用 RestTemplate 进行操作的时候会被限流降级
整合了 Feign,兼容了原先的 Hystrix 支持 Feign 的编程模型
数据源可配置化,只需在配置文件中配置数据源信息,即可动态加载规则
Endpoint 暴露各种元数据,比如配置信息,规则数据
HealthIndicator 检查 Sentinel 健康状态 (整合中)
支持 Spring Cloud Gateway 和 Zuul (整合中)
Spring Cloud Alibaba Sentinel 代替 Hystrix
想要使用 Spring Cloud Alibaba Sentinel,需要加上依赖信息:

<dependency>

<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel</artifactId>
<version>0.2.1.RELEASE</version>

</dependency>
0代码修改兼容 Feign
加上 Feign 的依赖:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>${latest.version}</version>
</dependency>
把 hystrix 的配置改成 sentinel 的即可使用 Sentinel 的限流降级功能:

feign.hystrix.enabled: true

feign.sentinel.enabled: true
@FeignClient(name = "service-provider")
public interface EchoService {

@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
String echo(@PathVariable("str") String str);

  @RequestMapping(value = "/echo/save", method = RequestMethod.POST)
String save(Foo foo);

}
对于这个 EchoService,echo 方法对应的资源名是 GET:http://service-provider/echo/{str}, save 方法对应的资源名是 POST:http://service-provider/echo/...。

只需配置这些规则,限流降级操作即可立即生效。

一行代码支持 RestTemplate
Sentinel 还跟 Spring 生态的 RestTemplate 做了整合,可以对 RestTemplate 请求过程进行限流和降级操作,只需要在构造 RestTemplate 的时候加上 @SentinelRestTemplate 注解即可:

@Bean
@SentinelRestTemplate
public RestTemplate restTemplate() {

return new RestTemplate();

}
@SentinelRestTemplate 注解还暴露出了对应的属性可进行限流降级后的自定义错误,默认的行为是返回 "RestTemplate request block by sentinel" 信息。关于 @SentinelRestTemplate 的详细信息可以参考 Wiki。

相关文章:

  • Spring 之 第一个hellword
  • nodejs实现webservice问题总结
  • matlab2014在mac Yosemite下出现java空指针情况
  • DECLARE_MESSAGE_MAP 宏
  • Apache发布NetBeans 10.0,增强对JDK 11的支持
  • Shadow DOM 内部构造及如何构建独立组件
  • 打印二叉树某一层次的值(重点)
  • 单例模式中用volatile和synchronized来满足双重检查锁机制
  • getName和getSimpleName方法一般使用
  • 博客迁移:https://blog.llyweb.com
  • 20141102-微信.NET-笔记
  • Java知识体系梳理
  • java 一些容易忽视的小点-数据类型和运算符篇
  • 设计模式--代理(Proxy)模式
  • 系统设计(系列二)--现上问题整理(云崩溃和服务不可用)
  • [译] 怎样写一个基础的编译器
  • DOM的那些事
  • HTML-表单
  • Javascript 原型链
  • jdbc就是这么简单
  • JS变量作用域
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 大整数乘法-表格法
  • 力扣(LeetCode)56
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 删除表内多余的重复数据
  • 手写一个CommonJS打包工具(一)
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 扩展资源服务器解决oauth2 性能瓶颈
  • #pragma once与条件编译
  • (1)(1.9) MSP (version 4.2)
  • (13):Silverlight 2 数据与通信之WebRequest
  • (力扣题库)跳跃游戏II(c++)
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (四)linux文件内容查看
  • (转)关于多人操作数据的处理策略
  • .NET CF命令行调试器MDbg入门(一)
  • .net core 连接数据库,通过数据库生成Modell
  • .Net Winform开发笔记(一)
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .netcore如何运行环境安装到Linux服务器
  • .Net组件程序设计之线程、并发管理(一)
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [ 第一章] JavaScript 简史
  • [Android View] 可绘制形状 (Shape Xml)
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [AR]Vumark(下一代条形码)