4

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ます。

そこで私は尋ねます:ここで使用する必要がある粒度の意図されたレベルは何ですか? また:

  1. すべてのDAO メソッドに対して1 つのHystrixCommandimpl を使用すると、コマンドが正常に実行される場合もあれば、失敗する場合もあることがわかります。また
  2. HystrixCommand何らかの方法でDAOクラスに焼き付けられ、すべてのDAOメソッドにまたがります(したがって、1つのコマンドが失敗すると、DAO全体が「ダウン」します)?

前者はより柔軟なエンジニアリングを表していると思いますが、ライブラリの消費者である私にはより多くのコードが導入されます。考え?アイデア?

4

1 に答える 1