2013-12-17 2 views
1

У меня есть простое приложение IBM MQ: есть две очереди -> одна очередь приема и, очевидно, другая очередь отправки. Теперь я помещаю большое количество сообщений в очередь приема, и когда приложение обрабатывает сообщения, я приостанавливаю процесс MQ core с помощью SIGSTOP.Приостановка диспетчера очереди MQ с использованием SIGSTOP

Если поток сообщений немедленно прекращается? Это то, что происходит в моем случае:

Приложение может получать все сообщения и отправлять их в очередь отправки после обработки. Теперь, если я попытаюсь направить дальнейшие сообщения в очередь приема, MQ putter (примерная служебная программа) не сможет нажимать обычные сообщения.

Мой вопрос: как должен MQ вести себя в этом случае? Если поток сообщений не прекращается сразу после сигнала SIGSTOP? Моя прикладная программа также не вызывает никаких исключений.

Любой ответ был бы полезен.

+0

Я едва могу заставить себя +1 это, но если только один другой человек читает его и не делает того, что предлагается, это того стоит. –

ответ

2

Короткий ответ заключается в том, что никто не может сказать вам, как WMQ должен вести себя в этой ситуации, потому что OMG, НЕ ДЕЛАЙТЕ ЭТО!

Кто-то задал подобный вопрос в последнее время на сервере списка. Эндрю Хиксон из команды разработчиков WMQ ответил так:

Передача сигнала СТОП на стороне сервера MQ приложения опасно достаточно, но посылая сигнал СТОП в процессе MQ (например amqrmppa) было бы крайне опасно. Если в этом процессе произошел сбой блокировки процесса между в момент поступления сигнала STOP, то вся очередь менеджер мог легко останавливаться. Такая же проблема возникает и для «простого» приложения на стороне сервера (например, для диспетчера очереди блокировки получены/выпущены во время обработки MQCONN), но область для непреднамеренной остановки диспетчера очереди намного больше с внутренним процессом MQ ,

Очевидным вопросом здесь является то, что вы считаете «основным процессом MQ»? Контроллер? Один из агентов-агентов? Все они взаимосвязаны, и нет единого процесса, который представляет собой «QMgr».

Если необходимо прервать обработку, использовать средства WMQ, такие как отключение PUT или GET на очереди, завершение соединения с QMGR и т.д.

+0

Я действительно не хочу этого делать. Но мой клиент делает и подталкивает к объяснению. В процессе MQ Core я имею в виду amqzxma0 (от ps -ef). – user3111793

+0

Ответ для вашего клиента заключается в том, что IBM не рекомендует или не поддерживает выпуск SIGSTOP для отдельных процессов QMgr, и результаты не определены. Хорошей новостью является то, что WMQ чрезвычайно прочен и построен для сохранения целостности данных в таких ситуациях, но это не значит, что невозможно стрелять в ногу таким образом. Используйте только документированные API и команды, кроме как по указанию Support. –

+2

Я согласен с T.Rob ... это глупое дело ... amqzxma0 - это контроллер выполнения - он в значительной степени является координатором того, что еще происходит - например, любой новый процесс, подключающийся к qmgr, должен использовать он выделяет процесс агента. Его EC, который периодически проверяет здоровье других процессов или очищает некоторые мертвые процессы - приостанавливает его, и вы спрашиваете ** о проблемах. DONT DO IT ... – JasonE

Смежные вопросы