Порядок сообщений для тем не указан в спецификации JMS, поэтому официальный ответ на этот вопрос заключается в том, что это зависит от реализации JMS. Сказав, что, если специально не отменено, чтобы сделать что-то еще, я предполагаю, что сообщения будут доставляться в порядке FIFO.
Для транзакций я предлагаю вам рассмотреть реализацию двухфазных транзакций XA с фиксацией, поэтому вам не нужны две отдельные транзакции. Если ваша реализация кеша поддерживает XA, транзакции JMS и Cache (и DB) будут одинаковыми.
Обычно я обнаружил, что для этих типов транзакционных сообщений, если вы должны использовать транзакционные сообщения, лучший способ снизить производительность - это обработать как можно больше сообщений в одной транзакции:
- Начать транзакцию
- Получение n сообщений (или всех их до истечения времени ожидания)
- Обработка сообщений
- Совершить транзакцию.
- Перейти к 1.
Еще один способ убить 2 зайцев - это пропустить обработку сообщения во время поиска и просто записать полученные сообщения в транзакционное хранилище данных. Затем отдельный поток извлекает сообщения из хранилища (в порядке отметок времени) и обрабатывает их (отдельный поток - = отдельная транзакция).