Manipulando Erros de MQInput

O nó MQInput executa as seguintes ações quando manipula erros com mensagens persistentes e transacionais. Os erros encontrados com mensagens não transacionais são manipulados conforme descrito em Gerenciando Erros no Nó Input.

Essa ação é resumida na tabela abaixo:

Evento de Erro Terminal Failure Conectado Terminal Failure Não Conectado Terminal Catch Conectado Terminal Catch Não Conectado
O nó detecta erro interno Fluxo conectado ao terminal de Falha manipula o erro Mensagem colocada na fila alternativa; novas tentativas de nó se a colocação falhar Não se aplica Não se aplica
O nó propaga mensagem para terminal failure, ocorre exceção no fluxo de saída Não se aplica Não se aplica Fluxo conectado ao terminal de Captura manipula o erro Novas tentativas para nós
O nó propaga a mensagem para o terminal de Captura, ocorre uma exceção no fluxo conectado ao terminal de Captura Erro registrado, mensagem revertida Erro registrado, mensagem revertida Não se aplica Não se aplica
O nó propaga a mensagem para o terminal de Falha, ocorre uma exceção no fluxo conectado ao terminal de Falha Não se aplica Não se aplica Novas tentativas para nós Novas tentativas para nós

Processamento de Nova Tentativa

O nó tenta o processamento de nova tentativa quando uma mensagem é revertida para a fila de entrada. Ele verifica se a mensagem foi recuperada anteriormente e se tiver sido, se a contagem de recuperação alcançou o (se igualou ao) limite de recuperação. A contagem de recuperação para cada mensagem é mantida pelo WebSphere MQ no MQMD.

Você especifica o (ou permite o padrão 0 no) atributo de limite de recuperação BOTHRESH ao criar a fila. Se você aceitar o valor padrão 0, o nó aumentará esse valor para 1. O nó também definirá o valor para 1 se não puder detectar o valor atual. Isso significa que se uma mensagem não foi recuperada anteriormente, ela será recuperada e repetida pelo menos uma vez.

  1. Se o nó tiver propagado uma mensagem para o terminal de saída várias vezes após repetidas tentativas com falha no fluxo de saída e o número de novas tentativas tiver alcançado o limite do limite de backout, ele tentará propagar a mensagem por meio do terminal de Falha, se ele estiver conectado. Se você não tiver conectado o terminal de Falha, o nó tentará colocar a mensagem em outra fila.

    Se ocorrer uma falha além do terminal de Falha, serão feitas novas tentativas adicionais até que o campo de contagem de backout no MQMD alcance o dobro do limite de backout configurado para a fila de entrada. Quando esse limite for alcançado, o nó tentará colocar a mensagem em outra fila.

  2. Se o limite de recuperação não tiver sido alcançado, o nó receberá a mensagem da fila novamente. Se falhar, isso será tratado como um erro interno (descrito acima). Se for bem-sucedido, o nó propagará a mensagem para o fluxo de saída.
  3. Se o limite de recuperação for alcançado:
    • Se você tiver conectado o terminal de Falha, o nó propagará a mensagem para esse terminal. É necessário manipular o erro no fluxo conectado ao terminal de Falha.
    • Se você não tiver conectado o terminal de Falha, o nó tentará colocar a mensagem em uma fila disponível, na ordem de preferência:
      1. A mensagem é colocada no nome de reenfileiramento de recuperação da fila de entrada (atributo da fila BOQNAME), se houver algum definido.
      2. Se a fila de recuperação não estiver definida, ou não puder ser identificada pelo nó, a mensagem será colocada na DLQ (Fila Dead Letter), se houver uma definida. (Se o gerenciador de filas do intermediário tiver sido definido pelo comando mqsicreatebroker, uma DLQ com um nome padrão de SYSTEM.DEAD.LETTER.QUEUE tiver sido definida e ativada para esse gerenciador de filas.)
      3. Se a mensagem não puder ser colocada em uma dessas filas porque há um erro de MQPUT (incluindo a inexistência da fila), ou porque não podem ser identificadas pelo nó, ela não poderá ser manipulada com segurança sem risco de perdas.

        A mensagem não pode ser descartada, portanto, o fluxo de mensagens continuará tentando recuperar a mensagem. Ele registra a situação de erro gravando erros no registro de erros local. A segunda indicação desse erro é o incremento contínuo de BackoutCount da mensagem na fila de entrada.

        Se essa situação tiver ocorrido porque não existe fila, você poderá definir uma das filas de recuperação mencionadas acima. Se a condição que impede que a mensagem seja processada for corrigida, será possível aumentar temporariamente o valor do atributo BOTHRESH. Isto força a mensagem através do processamento normal.

  4. Se o dobro do limite de backout tiver sido alcançado ou excedido, o nó tentará colocar a mensagem em uma fila disponível, na ordem de preferência, conforme definido na etapa anterior.

Tratamento de Erros do Grupo de Mensagens

WebSphere MQ suporta grupos de mensagens. Você pode especificar que uma mensagem pertence a um grupo e seu processamento é então concluído com referência a outras mensagens no grupo (ou seja, todas as mensagens são consolidadas ou todas as mensagens são revertidas). Ao enviar mensagens agrupadas a um intermediário, essa condição será sustentada se você tiver configurado o fluxo de mensagens corretamente e os erros não ocorrerem durante o processamento da mensagem do grupo.

Para configurar o fluxo de mensagens para tratar corretamente de mensagens agrupadas, siga as ações descritas no Nó MQInput. No entanto, o processamento correto do grupo de mensagens não poderá ser garantido se ocorrer um erro enquanto uma das mensagens estiver sendo processada.

Se você tiver configurado o nó MQInput conforme descrito, sob circunstâncias normais todas as mensagens no grupo são processadas em uma única unidade de trabalho que será consolidada quando a última mensagem no grupo tiver sido processada com êxito. No entanto, se ocorrer um erro antes do processamento da última mensagem no grupo, a unidade de trabalho que inclui as mensagens e incluindo a mensagem que gerou o erro estará sujeita ao tratamento de erros definido pelas regras documentadas aqui, o que pode resultar na recuperação da unidade de trabalho.

No entanto, qualquer uma das mensagens restantes no grupo pode ser lida e processada com êxito pelo fluxo de mensagens e, portanto, são tratadas e consolidadas em uma nova unidade de trabalho. Será emitida uma consolidação quando a última mensagem for encontrada e processada. Portanto, se ocorrer um erro em um grupo, mas não na primeira ou na última mensagem, será possível que uma parte do grupo seja recuperada e a outra parte consolidada.

Se os requisitos de processamento de mensagens exigirem que esta situação seja tratada de uma maneira específica, será necessário fornecer tratamento de erros adicional para tratar erros nos grupos de mensagens. Por exemplo, você pode registrar o defeito do grupo de mensagens em um banco de dados e incluir uma verificação no banco de dados quando recuperar cada mensagem, forçando uma reversão se o grupo atual já tiver encontrado um erro. Isto assegura que todo o grupo de mensagens será recuperado e não processado, a menos que todas as mensagens sejam bem-sucedidas.

Conceitos relacionados
Visão Geral de Fluxos de Mensagens
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ac00414_