Тайм-аут Hystrix не откатывает транзакцию при весенней загрузке

Я пытаюсь реализовать hystrix с помощью @Transactional в методе весенней загрузки.

@Transactional(transactionManager = "primaryTrnsManager")
@HystrixCommand(commandKey  = "createRecord", fallbackMethod = "createRecordFallback", commandProperties = {
@HystrixProperty(name = "execution.siolation.thread.timeoutInMilliseconds",value = "1000"),
@HystrixProperty(name = "circuitBreaker.requestVoulumeThreshold",value = "20"),
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "5000"),
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "50")})
public String createRecord(String name){
...............
//Dbcall
}
@Transactional(transactionManager = "backUptranManager",propagation=propagation.REQUIRES_NEW)
public String createRecordFallback(){
//dbcall

}

Что происходит, так это то, что когда происходит тайм-аут hystrix, вызов, который я сделал для базы данных, не получает откат, а hystrix возвращается к вторичному и снова вызывает базу данных с тем же запросом sql. В случае тайм-аута я хочу прервать предыдущую транзакцию и начать другую. Обычно это делает @Transactional, но с hystrix я вставляю повторяющиеся записи.

Любая помощь?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
0
495
1

Ответы 1

Это происходит потому, что HistryxCommand запускается в совершенно другом потоке, поэтому, когда «Histryx Admin Thread» (тот, который наблюдает за вашим командным потоком) достигает тайм-аута, он отмечает прерывание командного потока, но что происходит внутри Hyxtrix не может управлять им.

Итак, лучший подход для достижения желаемого поведения - это установить тайм-аут для транзакции или даже на уровне библиотеки jdbc, поэтому тайм-аут будет управляться изнутри командного потока, если он достигнут, исключение тайм-аута будут выброшены из командного потока, и Hyxtrix будет управлять им должным образом.

Другие вопросы по теме