Как я могу отменить регистрацию в группе сообщений JMS, не убивая всего потребителя (ActiveMQ) - PullRequest
1 голос
/ 03 февраля 2011

В моем распределенном приложении я отправляю запросы на обработку в очередь JMS. У меня есть несколько узлов, потребляющих из этой очереди (балансировка нагрузки). Обработка запросов требует загрузки в память довольно большого количества пользовательских данных, и я, очевидно, хочу сохранить эти данные в памяти для последующих запросов. Таким образом, я использую JMSXGroupId с идентификатором пользователя, чтобы убедиться, что все запросы для конкретного пользователя обрабатываются узлом, который уже кэшировал данные.

Через некоторое время, когда пользователь больше не активен, я хочу выгрузить данные на узле. В то же время я хотел бы, чтобы этот узел отказался от владения связанной группой сообщений JMS.

Я знаю, что отказываюсь от владения группой, закрывая соответствующего потребителя. Однако это означало бы, что я потеряю право собственности на все группы, связанные с этим потребителем, а не только на ту, для которой я только что выгружал кэшированные данные.

Есть ли способ отказаться от владения определенной группой на стороне потребителя?

Предпочтителен независимый от брокера способ, но я бы согласился на решение, специфичное для ActiveMQ, если это единственный путь. Кроме того, не стесняйтесь предлагать, как это можно сделать с вашим любимым брокером сообщений.

1 Ответ

2 голосов
/ 11 февраля 2011

Вы не можете сделать это прямо сейчас, не закрыв потребителя.Потребитель! = Соединение между прочим - так почему вы не используете несколько потребителей на одно соединение - по одному на группу?

...