我刚刚阅读了Hystrix 文档/wiki,但仍然在基本层面上遗漏了一些东西:impl的预期粒度级别是什么?HystrixCommand
例如,假设我有一个 DAO 对象来处理某些 DB 实体的 CRUD 操作,例如Widget
:
class Widget {
Long id
Long typeId
Long version
String name
Boolean isAlive
}
interface WidgetDao {
Widget insertWidget(Long typeId, String name, Boolean isAlive)
List<Widget> getAllWidgets()
Widget getWidgetById(Long id)
void updateWidget(Widget widget)
void deleteWidget(Widget widget)
}
现在,如果此 DAO 连接的数据库出现故障,所有 DAO 方法都将开始失败。但我认为数据库也有可能被捆绑在某种事务或维护模式下,比如允许读取,但不允许写入。在那种边缘情况下,读取会成功(getX(...)
方法),但所有其他的都会因SqlException
s 而失败。
所以我问:我应该在这里使用的预期粒度级别是多少?任何一个:
- 每个DAO 方法都有一个
HystrixCommand
impl ,看到在某些情况下命令可以成功运行,而在其他情况下,它们可能会失败;或者 - 一个
HystrixCommand
以某种方式融入 DAO 类,跨越所有DAO 方法(如果一个命令失败,则 DAO 作为一个整体“下降”。)?
我认为前者代表了更灵活的工程设计,但作为图书馆的消费者,我向我介绍了更多代码。想法?想法?