Очередь Tibco EMS должна быть очищена при подключении через мост

У меня есть очередь сообщений Tibco EMS в производственной системе, которая направляет сообщения от одного производителя к одному приложению-потребителю.

Мы масштабируем приложение по вертикали, но из-за финансовых ограничений мы не можем масштабировать два приложения попарно.

Один производитель будет маршрутизировать сообщения брокеру сообщений, и брокеру сообщений потребуется передать сообщение 1 из 3 потребителей на основе селектора сообщений.

Я установил мост очереди и селектор для маршрутизации сообщений из очереди производителя в очереди потребителей. Это мост очереди "1 ко многим".

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

Как лучше всего справиться с этим сценарием с использованием мостов и селекторов, чтобы сообщение сохранялось на брокере до тех пор, пока оно не будет использовано (долговечно), но после того, как сообщение потребляется очередью потребителя, сообщение удаляется брокером.


person Michael Starkie    schedule 27.09.2016    source источник


Ответы (1)


Самый простой способ избавиться от этих сообщений исходной очереди - это добавить в очередь MaxMsgs и MaxBytes.

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

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

person jens walter    schedule 27.09.2016
comment
Спасибо, но как получить числа для MaxMsgs и MaxBytes? Количество полученных сообщений не является детерминированным. Это может быть 1 в день или тысячи в минуту. - person Michael Starkie; 27.09.2016
comment
Если вам не нужны сообщения в исходной очереди для каких-либо других целей, вы можете просто установить для MaxMsgs значение 1. Таким образом, в очереди сохраняется только последнее сообщение. - person jens walter; 27.09.2016
comment
Ах. Я дам ему попробовать. - person Michael Starkie; 27.09.2016
comment
Похоже, это работает не так, как ожидалось. Приложение-производитель, которое выполняет запись в родительскую очередь, выдает исключение javax.jms.ResourceAllocationException: Превышен предел очереди. Когда я устанавливаю максимальное количество сообщений на 0, сообщения проходят снова при повторной попытке. - person Michael Starkie; 27.09.2016
comment
Это поведение вызвано параметром OverflowPolicy. Чтобы удалить старое сообщение, просто измените значение на discardOld (или числовое 1). Значение по умолчанию - 0, что означает, что дальнейшие сообщения будут отклоняться, как только очередь будет заполнена. - person jens walter; 27.09.2016