Откат Hystrix выполнен, хотя run() был успешным
Я использую Hystrix через Tenacity, модуль dropwizard для hystrix https://github.com/yammer/tenacity, и я заметил, что fallback()
называется даже если run()
метод успешно работает.
Вот как я это называю
TenacityCommand.<Long>builder(MyDeps.DATABASE)
.run(() -> insertIntoDB(event))
.fallback(() -> alert(event))
.execute();
Моя команда запуска просто выполняет вызов JDBI для вставки события в БД. Тем не менее, я замечаю, что приходят оповещения, но не вижу никаких исключений в журналах, а также вижу событие в базе данных?
Отсутствие каких-либо исключений в журнале при вставке в БД заставляет меня думать, что это вызвано тем, что все потоки для этой зависимости используются во время вызова команды. У меня есть 10 потоков в пуле для этой зависимости. Возможно ли, что все потоки заняты, поэтому откат выполнен и команда поставлена в очередь. Тогда когда поток доступен, метод run выполняется? Из документации это не должно быть так: https://github.com/Netflix/Hystrix/wiki/How-it-Works
Я также считаю, что это происходит потому, что, глядя на последовательность событий, событие вставляется в базу данных немного позже, чем ожидалось, по сравнению с другими событиями, которые происходят без выполнения отката.