BLUF - Добавьте «? Consumer.exclusive = true» в объявление назначения для аннотации JmsListener.
Похоже, что решение не такое сложное, особенно если отказаться от «групп сообщений» ActiveMQ в пользу «эксклюзивных потребителей». Недостатком «групп сообщений» является то, что отправитель должен заранее знать о потенциальном разделении потребителей сообщений. Если производитель обладает этими знаниями, «группы сообщений» являются хорошим решением, так как решение в некоторой степени не зависит от потребителя.
Но подобное решение может быть реализовано со стороны потребителя, если потребителю объявить «исключительного потребителя» в очереди. Хотя я не видел в реализации JmsTemplate ничего, что непосредственно поддерживает это, похоже, что реализация Spring JmsTemplate передает имя очереди в ActiveMQ, а затем ActiveMQ «делает правильные вещи» и обеспечивает исключительное поведение потребителя.
Итак ...
Изменить следующее ...
private final String consumerOne = "Consumer.myConsumer1.VirtualTopic.TEST-TOPIC";
до ...
private final String consumerOne = "Consumer.myConsumer1.VirtualTopic.TEST-TOPIC";?consumer.exclusive=true
Как только я это сделал, был вызван только один из двух объявленных методов получения, и порядок сообщений поддерживался во всех моих тестовых прогонах.