特定のサブスクライバーへの 1 つ以上のサブスクリプションは、Deregister Subscriber コマンド・メッセージを使用して登録解除できます。これは、ブローカー制御キュー SYSTEM.BROKER.CONTROL.QUEUE に送信されます。 このメッセージは、最初にサブスクリプションを登録したサブスクライバーによって送信されなければなりません。
サブスクリプションを登録解除する方法は、以下のような方法もあります。
サブスクライバー・アプリケーションがメッセージを送信してサブスクリプションを登録解除し、正常に実行されたことを示す応答メッセージを受信する際、パブリケーションの一部が登録解除時にブローカーによる処理の最中であった場合、それらが解除後にサブスクライバー・キューに到達する場合があります。この結果、サブスクライバー・キューで未処理のメッセージが構築されることがあります。 繰り返しスリープして適切な CorrelId を指定した MQGET 呼び出しを送信することで、アプリケーションがこのような未処理のメッセージをキューから消去することができます。
同様に、サブスクライバーが永続動的キューを使用し、終了時に PurgeandDelete オプションを指定してキューを登録解除およびクローズする場合、キューは空にならない場合があります。これは、ブローカーからのパブリケーションが、 キューの削除時にコミットされていないためです。 この場合、MQCLOSE 呼び出しによって Q_NOT_EMPTY 戻りコードが発行されます。 アプリケーションは、時折スリープして MQCLOSE 呼び出しを再発行することによって、 この問題を回避することができます。