Кажется, проблема в том, как вы используете SYSTEM.JMS.D.SUBSCRIBER.QUEUE
.Похоже, вы направляете сообщения и подписчиков в эту очередь в качестве места назначения для длительной подписки.IBM MQ использует эту очередь для управления надежными подписками.
Как правило, очереди, имена которых начинаются с SYSTEM
, предназначены для внутреннего использования системой MQ.Некоторые из них, такие как SYSTEM.ADMIN.*.EVENT
, подходят для получения сообщений, но вы также не будете использовать их в качестве пункта назначения подписки для несвязанных сообщений.
Многие учебники используют SYSTEM.DEFAULT.LOCAL.QUEUE
в качестве места назначения для сообщений, но это только потому, что известно, что очередь существует во всех версиях MQ, а MQ использует только определение очереди и никогда содержимое этой очереди.Для автора учебного пособия (и в этом IBM так же виноват) указывать на SYSTEM.DEFAULT.LOCAL.QUEUE
, а затем направлять учащегося через необходимость и средства для создания своей собственной очереди.Таким образом, хотя лучшие практики предполагают, что это не должно быть исключением из правила «не использовать SYSTEM
объекты», общее использование делает SYSTEM.DEFAULT.LOCAL.QUEUE
фактическим исключением.
Другими исключениями, конечно же, являютсяочереди команд для MQ, MFT и IIB.Это также имена SYSTEM.*
, но они предназначены для взаимодействия пользователей с программным обеспечением, прослушивающим очередь.
Обратите внимание, что все правила исключения "не использовать SYSTEM
объекты" являются интерфейсами между приложениями и системой MQ.Ресурсы.Очереди событий - это MQ, отправляющая информацию пользователю.Очереди команд - это пользователь, отправляющий информацию системным компонентам.Подписка не относится ни к одной из этих категорий.Пункт назначения для подписки считается объектом, принадлежащим приложению, даже если система управляет им от имени подписчика.
Если вы хотите иметь долговременную подписку, либо разрешите системе назначить постоянную очередь и использовать ее,или предварительно определите очередь (которая не называется SYSTEM.*
) и используйте ее.Что бы вы ни делали, НЕ пытайтесь перехватить внутренние системные очереди MQ для целей уровня приложения.