Использование сообщения Spring DMLC: auto_ack vs Transacted Session
У меня есть пара вопросов относительно весеннего DMLC.
- Почему поставщикам Spring рекомендуется использовать DMLC(контейнер прослушивателя сообщений по умолчанию) с транзакциями?
Поведение Spring DLMC и JMSTemplate при использовании транзакций
- На стороне потребителя, если я использую DMLC с sessionTransacted=false, он будет использовать режим ACTO_ACK по умолчанию. В чем разница между обоими случаями (транзакции и AUTO_ACK)? Насколько я понимаю, процесс подтверждения похож на меня в обоих случаях:
Транзакция: как только получатель получит сообщение, брокеру будет отправлено подтверждение, и только брокер будет считать сообщение доставленным.
Auto_Ack: здесь также для каждого сообщения, полученного потребителем, потребителю будет отправлено подтверждение брокеру.
Пожалуйста, поправьте меня, если я ошибаюсь.
Спасибо,
Ануй
1 ответ
С помощью DMLC и автоматического подтверждения сообщение подтверждается сразу же после его получения (и до вызова слушателя).
В случае транзакции сеанс фиксируется после вызова слушателя; и, если слушатель выдает исключение (или система теряет питание), транзакция откатывается (сообщение перезаписывается).