Я пробовал это с несколькими библиотеками и языками (php5 | php7 | расширение Stomp | ZF1 Stomp | пакет Python2.7 Stomp).
Я обнаружил, что если в очереди есть подписчик, и он начинает получать сообщения (кадры) из очереди, то любой новый подписчик в течение этого времени не будет получать никаких сообщений.
Мой вопрос:
Есть ли способ создать нового подписчика в очереди, в котором на данный момент есть сообщения + существующий подписчик, и что новый подписчик получит эти сообщения.
Я не отправляю эксклюзивные заголовки подписчиков.
Если до получения сообщений у меня было два подписчика, оба будут участвовать.
Скорее всего, у вас возникают проблемы с предварительной загрузкой, когда первый клиент предварительно выбирает все сообщения и просматривает их, а второй не получает ни одного. Для решения этой проблемы вы должны настроить клиентов с небольшим значением предварительной выборки, например 1, используя значения, указанные в Руководство ActiveMQ STOMP. Клиент должен добавить заголовок activemq.prefetchSize: 1 или тому подобное.
Вы также можете настроить клиентскую подписку на использование режима подтверждения клиента, который позволит вам контролировать, когда сообщение считается обработанным, и не позволяет брокеру отправлять больше сообщений.
Других решений пока нет …