Exemplo de um cluster com mais de uma instância de uma fila

Neste exemplo de um cluster com mais de uma instância de uma fila, as mensagens serão roteadas para instâncias diferentes da fila. É possível forçar uma mensagem para uma instância específica da fila e é possível optar por enviar uma sequência de mensagens para um de um dos gerenciadores de filas.

Figura 1 mostra um cluster no qual há mais de uma definição para a fila Q3. Se um aplicativo em QM1 coloca uma mensagem em Q3 e ele não sabe necessariamente qual instância do Q3 está indo processar sua mensagem. Se um aplicativo estiver em execução no QM2 ou QM4, onde há instâncias locais de Q3e a instância local de Q3 é aberta por padrão. Configurando o atributo da fila CLWLUSEQe a instância local da fila podem ser tratados da mesma forma que uma ocorrência remota da fila.

A opção MQOPEN DefBind controla se o gerenciador de filas de destino é escolhido quando a chamada MQOPEN é emitido ou quando a mensagem for transferido da fila de transmissão.

Se você configurar DefBind para MQBND_BIND_NOT_FIXED da mensagem pode ser enviada para uma instância da fila que está disponível quando a mensagem é transmitida. Isto evita os problemas a seguir:
  • A fila de destino está indisponível quando a mensagem chega no gerenciador de fila de destino.
  • O estado da fila foi mudado.
  • A mensagem foi colocada utilizando um alias de fila de clusters e nenhuma instância da fila de destino existe no gerenciador de filas no qual a instância do alias da fila do cluster está definida.
Se nenhum se esses problemas são descobertos no tempo de transmissão, outra instância disponível da fila de destino for solicitado e a mensagem é roteada novamente. Se nenhuma instância da fila estiver disponível, a mensagem é colocada na fila de mensagens não entregues.
Figura 1. Um Cluster com Múltiplas Instâncias da Mesma Fila
O diagrama mostra um cluster com quatro gerenciadores de filas conectados. QM1 possui duas filase Q1 e Q5. QM2 possui duas filase Q1 e Q3. QM3 possui uma fila Q2. QM4 tem duas filas, Q3 e Q4.

Um fator que pode impedir que as mensagens sejam roteadas novamente será se as mensagens foram designadas a um gerenciador de filas ou canal fixado com MQBND_BIND_ON_OPEN. As mensagens ligadas ao MQOPEN nunca são realocadas para outro canal. Observe também que a realocação de mensagem apenas ocorre quando um canal de cluster está realmente falhando. Realocação não ocorrerá se o canal já tiver falhado.

O sistema tentará rotear uma mensagem se o gerenciador de filas de destino ficar fora de serviço. Ao fazê­loe isto não afeta a integridade da mensagem correndo o risco de perdê-la ou criando uma duplicata. Se um gerenciador de filas falhar e deixar uma mensagem pendentee essa mensagem não será roteada novamente.

[z/OS]Em IBM® MQ for z/OS®, o canal não para completamente até que o processo de realocação de mensagens seja concluído. Parar o canal com o modo configurado como FORCE ou TERMINATE interrompe o processo, portanto, se você fizer isso, algumas mensagens BIND_NOT_FIXED poderão já ter sido realocadas para outro canal ou as mensagens poderão estar fora de ordem.

[z/OS]Observação:
  1. Antes de configurar um cluster que possui múltiplas instâncias da mesma fila, assegure que suas mensagens não tenham dependências entre si. Por exemplo, precisando ser processadas em uma sequência específica ou pelo mesmo gerenciador de filas.
  2. Torne as definições para diferentes instâncias da mesma fila idênticas. Caso contrário, você obterá resultados diferentes de diferentes chamadas MQINQ.