Бюджет: 25 USD Срок: 1 день
Добрый день!
Меня зовут Ярослав, я сотрудник компании Devoxen. У нас большой опыт работы с интеграционными процессами на базе Oracle SOA / BPEL, асинхронными вызовами, очередями и нагруженными системами.
По вашему примеру:
1. Проблемы в логике:
— catchAll вызывает retryServiceA без проверки факта успешного выполнения ServiceA → риск дублирования
— корреляция только по businessId → возможны конфликты при параллельных инстансах
— отсутствует контроль идемпотентности
— нет timeout / обработки ситуации, когда callback не приходит
2. Где возникают дубли/зависания:
— дубль: ServiceA выполнился, но из-за ошибки произошел retry → двойная обработка
— зависание: receive callback, если callback потерян / не скоррелирован / пришел раньше
— рост очередей из-за неконтролируемых retry и отсутствия ограничений
3. Решения (кратко):
— добавить идемпотентность (businessId + messageId)
— уточнить correlation set и исключить параллельные инстансы
— разделить технические и бизнес-ошибки (убрать слепой catchAll)
— добавить timeout, retry policy с лимитами, DLQ
— проверить настройки JMS, транзакций и dehydration store
Работаем со стеком: Oracle SOA Suite, BPEL, JMS, REST/SOAP, PostgreSQL/Oracle DB, системы мониторинга и логирования.
Предлагаю перейти в личные сообщения для обсуждения деталей аудита.