В нашем приложении мы получаем сообщения от JMS Topic.
- Сначала я хочу знать, следует ли JMS политике FIFO. Если нет, то как приложение может решить, какое сообщение является последним?
Мы потребляем сообщения (постоянный подписчик и JMS-сеанс выполняются, много накладных расходов), потому что сообщения сохраняются на JMS-сервере до тех пор, пока транзакция не завершится/завершится. Причина, по которой мы указали транзакцию,
Мы используем технологию кэширования (гибернации) и транзакцию для ее использования. Итак, мы используем две транзакции: одна — JMS tx, а другая — технология кэширования. Когда мы потребляем сообщение и хотим, чтобы все или ничего не происходило, пока сообщение не будет зафиксировано и подтверждение не будет отправлено в JMS. кэширование tx будет зафиксировано первым, а затем сразу JMS tx будет зафиксировано следующим, и сообщение будет подтверждено, в противном случае оба tx будут отброшены, и сообщение будет воспроизведено. В настоящее время мы воспроизводим сообщения 3 раза, а затем, если исключение все еще возникает, мы отправляем сообщение в необрабатываемую очередь.
Это работает нормально до тех пор, пока в JMS одновременно не придет много сообщений, которые должны быть обработаны нашей системой одновременно.
Я хотел бы знать, что вы делали, когда столкнулись с таким сценарием. Потому что поддержание долговременной подписки и транзакционного сеанса требует значительных накладных расходов по сравнению с сервером JMS и снижает производительность сервера.