Hystrix docs/wikiを読んだだけですが、まだ基本的なレベルで何かが欠けています: implの粒度の意図されたレベルは何ですか?HystrixCommand
たとえば、次のような DB エンティティの CRUD 操作を処理する DAO オブジェクトがあるとします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 メソッドが失敗し始めます。しかし、DB が何らかのトランザクションまたはメンテナンス モードで拘束される可能性もあると思います。たとえば、読み取りは許可されていますが、書き込みは許可されていません。そのエッジ ケースでは、読み取り (getX(...)
メソッド) は成功しますが、他のすべてのメソッドは s で失敗しSqlException
ます。
そこで私は尋ねます:ここで使用する必要がある粒度の意図されたレベルは何ですか? また:
- すべてのDAO メソッドに対して1 つの
HystrixCommand
impl を使用すると、コマンドが正常に実行される場合もあれば、失敗する場合もあることがわかります。また HystrixCommand
何らかの方法でDAOクラスに焼き付けられ、すべてのDAOメソッドにまたがります(したがって、1つのコマンドが失敗すると、DAO全体が「ダウン」します)?
前者はより柔軟なエンジニアリングを表していると思いますが、ライブラリの消費者である私にはより多くのコードが導入されます。考え?アイデア?