Заказ о потреблении бобов и сообщений и сообщений
-
24-10-2019 - |
Вопрос
У меня есть MDB, который подписан на тему, которая отправляет сообщения, контент которого в конечном итоге сохраняется в БД.
Я знаю, что MDB объединяются, и поэтому контейнер способен обрабатывать более одного входящего сообщения параллельно. В моем случае важен порядок, в котором эти сообщения потребляются (и затем сохраняются). Я не хочу, чтобы пул экземпляров MDB потреблял, а затем сохранял сообщения в другом порядке, поскольку они публикуются в теме JMS.
Может ли это быть проблемой? Если так, есть ли способ сказать контейнеру следовать строгому входящему порядку при употреблении сообщений?
Решение
Скопировано из там:
Чтобы убедиться, что заказ в получении соответствует заказу, в котором клиент отправил сообщение, вы должны сделать следующее:
Установите Max-Beans-In-Pool на 1 для MDB. Это гарантирует, что MDB является единственным потребителем сообщения.
Если ваши MDB развернуты на кластере, разверните их в один узел в кластере, [...].
- Чтобы обеспечить заказ сообщений в случае отката и восстановления транзакций, настройте настройку настраиваемого подключения с установленной на 1 MessageMaximum и убедитесь, что задержка переоборудования не настроена. Для получения дополнительной информации см. [...].
Другие советы
Вы должны иметь возможность ограничить размер пула MDB до 1, что обеспечивает обработку сообщений в правильном порядке.
Конечно, если вы все еще хотите там параллелизм, у вас есть пара вариантов, но это действительно зависит от данных.
Если в определенных сообщениях есть что -то общее, а порядок обработки имеет значение только в этой группе сообщений, которые имеют общее значение, вам может потребоваться иметь несколько тем, или использовать очереди и тренас.
Если, с другой стороны, определенное части Из логики, связанной с появлением сообщения, может происходить параллельно, в то время как другие биты не могут, тогда вам нужно будет разделить логику на параллельные и параллельные части-ток, и обработать эти биты соответственно.