subscriber 등록 취소 명령 메시지는 subscriber에서 브로커로, 또는 subscriber 대신 다른 응용프로그램으로 송신되며 해당 매개변수와 일치하는 메시지를 더 이상 수신하지 않음을 나타냅니다.
이 메시지는 브로커의 컨트롤 큐인 SYSTEM.BROKER.CONTROL.QUEUE로 송신됩니다. 사용자는 메시지를 이 큐에 넣으려면 필요한 권한을 가지고 있어야 합니다.
명령 메시지를 브로커로 보낼 때 필요한 메시지 설명자(MQMD) 매개변수에 대한 자세한 내용은 브로커로 보낼 명령 메시지의 MQMD 설정을 참조하십시오.
해당 토픽, subscription 지점, 원본 subscription의 필터 값을 지정하면 개별 subscription을 등록 취소할 수 있습니다. 원본 subscription에 이 값 중 하나라도 지정되지 않은 경우(즉 디폴트 값인 경우), subscription이 등록 취소될 때 해당 값은 생략됩니다.
Subscriber에 대한 모든 subscription 또는 subscriber 그룹은 DeregAll 옵션을 사용하여 등록 취소할 수 있습니다. 예를 들면, DeregAll이 subscription 지점과 함께 지정된 경우(토픽이나 필터 없이), 토픽과 필터에 상관없이 지정된 subscription 지점에서 해당 subscriber에 대한 모든 subscription이 등록 취소됩니다. 토픽, 필터, subscription 지점의 모든 조합이 허용됩니다. 세 가지 모두 지정하면 하나의 subscription 지점만 일치하게 되고 DeregAll 옵션은 무시됩니다.
메시지는 subscription을 등록한 subscriber가 송신해야 합니다. 이에 대해서는 subscriber의 사용자 ID를 점검하여 확인됩니다.
시스템 관리자도 subscription을 등록 취소할 수 있습니다. 그러나, 임시 다이나믹 큐에 등록된 subscription은 큐 이름만이 아닌 큐와 연관됩니다. 큐가 명시적으로 삭제되거나 큐 관리자에서 연결을 끊은 응용프로그램에 의해 삭제된 경우, 더 이상 Subscriber 등록 취소 명령을 사용해야 해당 큐의 subscription을 등록 취소할 수 없습니다. Subscription은 Workbench을 사용해서 등록 취소될 수 있으며, 다음 번에 publication을 subscription에 일치시킬 때 또는 다음 번에 브로커가 재시작할 때 브로커가 자동으로 해당 Subscription을 제거합니다. 일반적인 상황에서 응용프로그램은 큐를 삭제하거나 큐 관리자에서 연결을 끊기 전에 해당 subscription을 등록 취소해야 합니다.
subscriber가 subscription 등록 취소 메시지를 송신하고 정상적으로 처리되었다는 응답 메시지를 수신하면, 일부 publication은 subscription이 등록 취소됨과 동시에 브로커에서 처리되고 있는 중에도 여전히 subscriber 큐에 도달합니다. 큐에서 메시지가 제거되지 않은 경우, subscriber 큐에서 처리되지 않은 메시지가 작성되고 있는 것일 수 있습니다. 응용프로그램이 잠시 유휴 상태를 취한 후 적절한 CorrelId가 있는 MQGET 호출이 포함된 루프를 실행할 경우, 해당 메시지는 큐에서 지워집니다. SCADA 디바이스 프로토콜을 사용할 경우, 정리(clean) 시작 및 완료 옵션이 있습니다. 이는 클라이언트의 메시지가 지워짐을 의미합니다.
마친가지로, subscriber가 영구적 다이나믹 큐를 사용하며 MQCLOSE 호출에 MQCO_DELETE_PURGE 옵션을 설정하여 큐를 등록 취소한 다음 닫을 경우, 큐는 비어 있지 않습니다. 큐가 삭제될 때 브로커에서의 어떠한 publication도 아직 확약되지 않았다면, MQCLOSE 호출에서 MQRC_Q_NOT_EMPTY 리턴 코드를 표시합니다. 응용프로그램은 때때로 MQCLOSE 호출을 중지했다가 재실행하여 이 문제를 방지할 수 있습니다.
이 등록 정보는 반드시 지정해야 합니다.
여러 토픽을 등록 취소하려는 경우 선택에 따라 이 등록 정보를 반복할 수 있습니다. DeregAll이 <RegOpt>에 지정된 경우 생략할 수 있습니다.
subscriber가 다른 토픽에 대한 subscription을 보유하려는 경우 지정된 토픽은 등록된 토픽의 서브세트일 수 있습니다. 와일드카드 문자를 사용할 수 있지만 와일드카드 문자가 포함된 토픽 문자열은 subscriber 등록 명령 메시지에 지정된 해당 문자열과 정확히 일치해야 합니다.
디폴트 subscription 지점을 명시적으로 지정할 수 없음을 유의하십시오. 따라서, 이 subscription 지점에서만 모든 subscription을 등록 취소할 방법은 없습니다. 토픽을 지정해야 합니다.
SubIdentity가 subscription의 ID 세트에 있는 경우, 세트에서 제거됩니다. 그 결과 ID 세트가 비게 되는 경우, RegOpt 등록 정보의 값으로 LeaveOnly가 지정된 경우를 제외하고 브로커에서 subscription이 제거됩니다. ID 세트에 여전히 다른 ID가 포함되어 있는 경우, 브로커에서 subscription이 제거되지 않으며 publication 플로우가 인터럽트되지 않습니다.
SubIdentity가 지정되었지만 SubIdentity가 subscription의 ID 세트에 없는 경우, 리턴 코드 MQRCCF_SUB_IDENTITY_ERROR가 표시되면서 Subscriber 등록 취소 명령이 실패합니다.
둘 이상의 필터를 등록 취소하려는 경우 선택에 따라 이 등록 정보를 반복할 수 있습니다. <Topic>이 지정되거나 DeregAll이 <RegOpt>에 지정된 경우 생략할 수 있습니다.
Subscriber가 다른 필터에 대한 subscription을 보유하려는 경우 지정된 필터는 등록된 필터의 서브세트일 수 있습니다.
이 subscriber에 대해 등록된 일치하는 모든 subscription이 등록 취소됩니다.
값이 0이어서는 안되는 메시지 설명자(MQMD)의 CorrelId는 subscriber를 나타내는 데 사용됩니다. 원본 subscription에 사용된 CorrelId와 일치해야 합니다.
FullResp가 지정된 경우, 명령이 실패하지 않으면 subscription의 모든 속성이 응답 메시지에 리턴됩니다.
FullResp가 지정된 경우, Subscriber 등록 취소 명령에 DeregAll을 사용할 수 없습니다. 여러 토픽을 지정할 수도 없습니다. 두 경우 모두 리턴 코드 MQRCCF_REG_OPTIONS_ERROR가 표시되면서 명령이 실패합니다.
Subscription의 ID 세트에 SubIdentity가 있을 때 이를 지정하면, SubIdentity가 subscription의 ID 세트에서 제거됩니다. 결과 ID 세트가 비어 있더라도 브로커에서 subscription이 제거되지 않습니다. SubIdentity 값이 ID 세트에 없는 경우, 리턴 코드 MQRCCF_SUB_IDENTITY_ERROR가 표시되면서 명령이 실패합니다.
LeaveOnly가 SubIdentity 없이 지정되면, 리턴 코드 MQRCCF_REG_OPTIONS_ERROR가 표시되면서 명령이 실패합니다.
LeaveOnly이나 SubIdentity 중 아무것도 지정되지 않은 경우, subscription의 ID 세트 컨텐츠에 상관없이 subscription이 제거됩니다.
모든 옵션은 디폴트 값을 가집니다. 이 값은 등록 옵션 등록 정보를 생략하는 것과 같은 효과를 가집니다. 다른 옵션이 동시에 지정된 경우, None은 무시됩니다.
지정된 경우 subscriber ID(큐, 큐 관리자, correlid)는 단일 사용자 ID로 제한되지 않습니다. 이는 원본 등록 메시지의 사용자 ID를 subscriber의 ID와 연관시키고 그때부터 다른 사용자가 해당 ID를 사용하지 못하도록 하는 기존의 브로커 작동과 다릅니다. 새 subscriber가 동일한 ID를 사용하려고 하면 리턴 코드 MQRCCF_DUPLICATE_SUBSCRIPTION이 표시됩니다.
모든 사용자는 적절한 권한이 있는 경우 subscription을 수정하거나 등록 취소할 수 있어 사용자 ID가 원래의 subscriber ID와 일치해야 하는지 여부에 대해 기존에 수행하던 점검을 수행할 필요가 없습니다.
이 옵션을 기존 subscription에 추가하려면 명령은 원래의 subscription 자체와 동일한 사용자 ID로 실행되어야 합니다.
등록 취소할 subscription에 VariableUserId가 설정되어 있는 경우, 등록 취소 시 이 옵션을 설정하여 등록 취소 중인 subscription이 어떤 것인지 나타내야 합니다. 아니면 subscription을 확인하는 데 Subscriber 등록 취소 명령의 사용자 ID가 사용됩니다. Subscription 이름이 제공된 경우 다른 subscriber ID와 함께 이 ID는 대체됩니다.
이 등록 정보가 생략된 경우 디폴트는 등록 옵션이 설정되지 않은 상태입니다.
이 등록 정보를 생략할 경우, 디폴트 값은 메시지 설명자(MQMD)의 ReplyToQMgr 이름입니다. 결과로 표시되는 이름이 공백인 경우, 디폴트는 브로커의 큐 관리자 이름입니다.
이 등록 정보를 생략할 경우, 디폴트 값은 메시지 설명자(MQMD)의 ReplyToQ 이름으로 공백이어서는 안됩니다.
이 명령의 기존 ID와 일치하는 subscription이 존재하지만 SubName이 없는 경우 리턴 코드 MQRCCF_SUB_NAME_ERROR가 표시되면서 Subscriber 등록 취소 명령에 실패합니다. 기존의 ID와 일치하는 명령 메시지를 사용하여 SubName을 갖는 subscription을 등록 취소하려고 시도했지만 SubName이 지정되지 않은 경우, 명령이 성공합니다.
SubUserData는 subscription의 Metatopic 정보(MQCACF_REG_SUB_USER_DATA)에 리턴됩니다(있는 경우).