Очистить сообщения от mq с помощью java



Как лучше всего подключиться к websphere mq v7. 1 и очистить все сообщения одной или нескольких указанных очередей с помощью Java и JMS? Нужно ли использовать специфический java API Websphere MQ? Спасибо.

692   1  

1 ответ:

Как и все хорошие вопросы, " это зависит."

Очередь может быть очищена командой только в том случае, если в ней нет открытых дескрипторов. В этом случае отправка команды PCF для очистки очереди довольно эффективна,но если есть открытые дескрипторы, вы получите ошибку. Команды PCF, конечно, являются функцией Java, а не JMS, поскольку они являются собственностью WebSphere MQ.

С другой стороны, любая программа, уполномоченная выполнять деструктивные выходы из очереди, может очистить очередь. В этом кейс, просто повторите цикл над get, пока не получите код возврата 2033, указывающий, что очередь пуста. Это может быть выполнено с помощью JMS или Java, но оба они управляют входным буфером для вас. Если очередь действительно глубокая, то вы в конечном итоге перемещаете все эти данные, и если приложение подключено к клиенту, вы перемещаете его со скоростью сети, а не в памяти.

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

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

Comments

    Ничего не найдено.