spring - Spring Retry vs Hystrix
问题描述
@CircuitBreaker
fromspring-retry
和@HystrixCommand
from和有什么不一样spring-cloud-starter-netflix-hystrix
?
他们似乎都实现了断路器模式。
官方 Spring 指南正在使用@HystrixCommand
:https ://spring.io/guides/gs/circuit-breaker/
在他们的例子中:
@HystrixCommand(fallbackMethod = "reliable")
public String readingList() {
URI uri = URI.create("http://localhost:8090/recommended");
return this.restTemplate.getForObject(uri, String.class);
}
public String reliable() {
return "Cloud Native Java (O'Reilly)";
}
相当于(据我所知):
@CircuitBreaker
public String readingList() {
URI uri = URI.create("http://localhost:8090/recommended");
return this.restTemplate.getForObject(uri, String.class);
}
@Recover
public String reliable() {
return "Cloud Native Java (O'Reilly)";
}
解决方案
@CircuitBreaker
- 不确定它是否是实际的注释。AFAIK,它不是。spring-retry
-@Retryable
是用于实现此目的的注释。这基本上所做的是根据某些标准重试当前正在执行的方法指定次数。@HystrixCommand
- 当一个方法被执行时,这个注解实际上触发了断路器功能。
有效差异——
@Retryable
与断路器无关。即使结果每次都失败,它也会盲目地重试操作。它在当前请求的本地上下文中运行。这意味着它不知道系统上重试的全局状态。它所关心的是每个请求都必须重试很多次。@HystrixCommand
是一个智能注释。它知道系统的全局状态,如果失败次数超过指定的断路器阈值,它实际上会停止执行该方法。
推荐阅读
- sql - 确定 Netezza 之旅的“开始”和“结束”日期?
- binary - 什么是固定宽度的二进制数据格式?
- django - 如何在 PyCharm 上使用 Django 框架为 Cassandra 本地创建节点?
- mysql - 在 MySQL 中拆分和比较小时格式
- android - 检查 xml 的 id
- node.js - 登录后如何将用户带回原始URL?
- sitecore - Azure 中的 Sitecore 9.1 初始密码
- android - 对于 SMACK 4.3.4 如何更新客户端连接到服务器所需的默认证书?
- amazon-s3 - 如何搜索在两个时间戳之间对“s3”存储桶所做的更改?
- python - Python - 将包含 IP 地址和不同数据的文本文件中的列表转换为 CSV