A mensagem de comando Registrar Assinante é enviada a um intermediário por um assinante, ou por outro aplicativo em nome de um assinante, para indicar que ele deseja assinar um ou mais tópicos em um ponto de assinatura. Um filtro de conteúdo de mensagem também pode ser especificado.
Nas expressões de filtro Publicação/Assinatura, os parênteses de aninhamento fazem com que o desempenho caia exponencialmente. Na prática, evite o parênteses de aninhamento para obter uma maior profundidade que aproximadamente 6.
A mensagem é enviada a SYSTEM.BROKER.CONTROL.QUEUE, que é a fila de controle do intermediário. É requerida autoridade para colocar uma mensagem nessa fila, além de autoridade de acesso (definida pelo administrador do sistema do intermediário) ao tópico ou tópicos na assinatura.
Se o usuário tiver autoridade em alguns mas não em todos os tópicos, somente os tópicos com autoridade serão registrados; uma resposta de aviso indicará quais tópicos não serão registrados.
Consulte Mensagem Broker Response para obter detalhes sobre os parâmetros do descritor de mensagem (MQMD) que são necessários ao enviar uma mensagem de comando ao intermediário.
Se a fila for uma fila dinâmica temporária, o registro da assinatura será cancelado automaticamente pelo servidor intermediário quando a fila for fechada.
Essa propriedade é requerida, e pode ser repetida opcionalmente para tantos tópicos quanto necessário.
Se essa propriedade for omitida, o ponto de assinatura padrão será utilizado.
Se essa propriedade for omitida, não ocorrerá filtragem de conteúdo.
Quando especificada para uma assinatura existente que corresponda à identidade tradicional deste comando Register Subscription, mas sem valor atual de SubName, o SubName especificado nesse comando será adicionado à assinatura.
Se AddName for especificado o campo SubName é obrigatório, caso contrário será retornado MQRCCF_REG_OPTIONS_ERROR.
O CorrelId no descritor da mensagem (MQMD) é utilizado ao enviar publicações correspondentes à fila do assinante. O CorrelId não pode ser zero.
Quando especificado, todos os atributos da assinatura serão retornados na mensagem de resposta se o comando não falhar.
FullResp é válido somente quando a mensagem de comando se referir a uma única assinatura. Pertanto, apenas um tópico é permitido no comando. Caso contrário, o comando falha com o código de retornoMQRCCF_REG_OPTIONS_ERROR.
O intermediário informa ao assinante se uma publicação é retida quando ele envia uma mensagem Publish em resposta a uma mensagem de comando Registrar Assinante ou Pedido de Atualização. O intermediário faz isso incluindo a opção de publicação IsRetainedPub na mensagem.
Esta opção indica que a SubIdentity especificada deve ser incluída como o membro exclusivo do conjunto de identidades definido para esta assinatura e que nenhuma outra identidade pode ser incluída ao conjunto.
Se a identidade já estiver unida 'compartilhada' e for a única entrada no conjunto, esse será alterado para uma trava exclusiva mantida por essa identidade. Caso contrário, se a assinatura tiver outras identidades no conjunto de identidades (com acesso compartilhado) atualmente, o comando falhará com o código de retorno MQRCCF_SUBSCRIPTION_IN_USE.
Esta opção indica que a SubIdentity especificada deve ser adicionada ao conjunto de identidades para a assinatura.
Se a assinatura estiver bloqueada exclusivamente no momento (utilizando a opção JoinExcl), o comando falhará com o código de retorno MQRCCF_SUBSCRIPTION_LOCKED, a menos que a identidade que possui a assinatura bloqueada seja a mesma que a dessa mensagem de comando. Nesse caso a trava será modificada automaticamente para uma trava compartilhada.
A assinatura é local e não é distribuída a outros intermediários na rede. As publicações feitas em outros intermediários não serão entregues a esse assinante a menos que ele também tenha uma assinatura global correspondente.
As publicações retidas existentes no momento em que a assinatura é registrada não são enviadas ao assinante; somente novas publicações são enviadas.
Se um assinante registrar novamente e alterar essa opção de modo que ela não esteja mais definida, uma publicação que já foi enviada a ele poderá ser enviada novamente.
Os atributos de uma assinatura correspondente existente não são alterados.
Quando uma assinatura está sendo criada, essa opção é ignorada. Todas as outras opções especificadas se aplicam à nova assinatura.
Se SubIdentity também tiver uma das opções de união (JoinExcl ou JoinShared) especificada, a identidade será incluída ao conjunto de identidade, independentemente de NoAlter estar especificado.
Todas as opções de registro assumem seus valores padrão.
Se o assinante já estiver registrado, suas opções serão redefinidas para seus valores padrão (observe que isto não tem o mesmo efeito de omitir a propriedade registration options), e a expiração da assinatura é atualizada a partir do MQMD da mensagem Registrar Assinante.
Se outras opções de registro forem especificadas ao mesmo tempo Nenhuma será ignorada.
As publicações correspondentes a esta assinatura serão entregues ao assinante como mensagens não persistentes.
As publicações correspondentes a esta assinatura serão entregues ao assinante como mensagens persistentes.
As publicações correspondentes a esta assinatura serão entregues ao assinante com a persistência especificada pelo publicador. Este não é o comportamento padrão.
As publicações correspondentes a esta assinatura serão entregues ao assinante com a persistência especificada na fila do assinante.
O intermediário não envia publicações ao assinante, exceto em resposta a uma mensagem de comando Pedido de Atualização.
Quando especificado, a identidade do assinante (fila, gerenciador de filas e correlid) não será restrita a um único ID do usuário. Isso difere do comportamento existente do intermediário que associa o ID do usuário da mensagem de registro original à identidade do assinante e a partir daí impede que outros usuários utilizem essa identidade. Se um novo assinante tentar utilizar a mesma identidade, MQRCCF_DUPLICATE_SUBSCRIPTION será retornado.
Isso permite a qualquer usuário modificar a assinatura ou cancelar seu registro se o usuário tiver autoridade apropriada. Portanto, não há necessidade de verificar se o ID do usuário corresponde ao do assinante original.
Para incluir essa opção a uma assinatura existente o comando deve vir do mesmo ID do usuário da própria assinatura original.
Se a assinatura do comando request update tiver VariableUserId definido, este deve ser definido no tempo de atualização do pedido para indicar a qual assinatura se refere. Caso contrário, o ID do usuário do comando request update será utilizado para identificar a assinatura. Isso é substituído, junto com os outros identificadores do assinante, se for fornecido um nome de assinatura.
Se uma mensagem de comando Registrar Assinante sem esta opção definida se referir a uma assinatura existente que tenha esta opção definida, a opção será removida dessa assinatura e o ID do usuário da assinatura agora será fixo. Se já existir um assinante que possua a mesma identidade (fila, qmgr e correlid) mas com um ID de usuário diferente associado a ele, o comando falhará com o código de retorno MQRCCF_DUPLICATE_IDENTITY porque poderá haver apenas um ID associado a uma identidade de assinante.
Se a propriedade registration options for omitida e o assinante já estiver registrado, suas opções de registro não serão alteradas e a expiração da assinatura será atualizada a partir do MQMD da mensagem Registrar Assinante.
Se o assinante ainda não estiver registrado, uma nova assinatura será criada com todas as opções de registro assumindo seus valores padrão.
Os valores padrão são PersAsPub e nenhuma outra opção definida.
Se essa propriedade for omitida, o padrão é o nome de ReplyToQMgr no descritor da mensagem (MQMD). Se o nome resultante estiver em branco, ele assumirá o padrão do QMgrName do intermediário.
Se essa propriedade for omitida, o padrão é o nome de ReplyToQ no descritor da mensagem (MQMD), o qual não pode estar em branco neste caso.
Se a fila for uma fila dinâmica temporária, a entrega não persistente de publicações (NonPers) deve ser especificada na propriedade <RegOpt>.
Se a fila for uma fila dinâmica temporária, o registro da assinatura será cancelado automaticamente pelo servidor intermediário quando a fila for fechada.
Se já existir uma assinatura com este SubName, quaisquer outros atributos da assinatura (Topic, QMgrName, QName, CorrelId, UserId, RegOpts, UserSubData e Expiry) serão substituídos pelos atributos, se especificados, que forem transmitidos na nova mensagem de comando Registrar Assinante. Entretanto, se SubName for utilizado sem o campo QName especificado e uma ReplyToQ for especificada no cabeçalho MQMD, a fila do assinante será alterada para ser a ReplyToQ.
Se uma assinatura que corresponda à identidade tradicional desse comando já existir, mas não possuir nenhum SubName, o comando de Registro falhará com o código de retorno MQRCCF_DUPLICATE_SUBSCRIPTION, a menos que a opção Incluir Nome esteja especificada.
Se você tentar alterar uma assinatura nomeada existente, utilizando outro comando Registrar Assinante que especifique o mesmo SubName e os valores de Tópico, QMgrName, QName e CorrelId no novo comando corresponderem a uma assinatura diferente existente, com ou sem um SubName definido, o comando falhará com código de retorno MQRCCF_DUPLICATE_SUBSCRIPTION. Isso impede que dois nomes de assinaturas se refiram á mesma assinatura.
Um comando subscribe que especifique as opções JoinShared ou JoinExcl adiciona a SubIdentity ao conjunto de identidades da assinatura, se ela ainda não estiver lá e se o conjunto de identidades existente permitir essa ação; ou seja, se nenhum outro assinante tiver se unido com exclusividade ou se o conjunto de identidades estiver vazio.
Qualquer alteração dos atributos da assinatura como resultado de um comando Registrar Assinante no qual umaSubIdentity for especificada somente obterá êxito se ela for o único membro do conjunto de identidades para esta assinatura. Caso contrário, o comando falhará com o código de retorno MQRCCF_SUBSCRIPTION_IN_USE. Isso impede que os atributos de uma assinatura sejam alterados sem que outros assinantes interessados tomem conhecimento.
Se você especificar uma cadeia de caracteres com mais de 64 caracteres, o comando falhará com o código de retorno MQRCCF_SUB_IDENTITY_ERROR.
O Dados do Subusuário é retornado nas informações de Metatopic (MQCACF_REG_SUB_USER_DATA) de uma assinatura, se estiver presente.
Se você especificar mais de um dos valores de opções de registro NonPers, PersAsPub, PersAsQueue e Pers, somente o último será utilizado. Essas opções não podem ser combinadas em uma assinatura individual.
<psc> <Command>RegSub</Command> <RegOpt>PubOnReqOnly</RegOpt> <RegOpt>CorrelAsId</RegOpt> <Topic>Sport/Soccer/State/LatestScore/#</Topic> </psc>