Participe da Maratona Behind the Code! A competição de programação que mais te desafia! Inscreva-se aqui

Folha de dicas do IBM MQ para desenvolvedores

O cenário é o seguinte: você acabou de codificar, compilar e executar o seu aplicativo pela primeira vez. Momentos emocionantes! Ah não! Aconteceu algum problema. Uma mensagem de erro foi gerada.

Não fique em pânico! Isso acontece até mesmo com os melhores desenvolvedores.

É hora de depurar, mas por onde devemos começar?

Existem vários motivos pelos quais um aplicativo pode falhar, então, como sabemos se há um problema com o código de sistema de mensagens, com as chamadas da API do MQ ou com os objetos relacionados ao MQ?

Se sua mensagem de erro contém um código de razão do MQ, por exemplo, AMQ2035 2035 MQRC_NOT_AUTHORIZED, é provável que algo deu errado com a interação com o MQ.

Geralmente, fica óbvio na mensagem de erro o que deu errado, então você corrigir o código e seguir em frente. No entanto, às vezes, é necessário um pouco mais de depuração. As seções a seguir analisam algumas etapas básicas de depuração e fornecem algumas dicas e sugestões para que você continue avançando.

Problemas ou erros comuns

Nós conferiremos alguns dos problemas comuns que a maioria dos novos desenvolvedores de aplicativos MQ encontrarão: desde erros de compilação até problemas de conexão, desde erros de configuração até problemas de segurança. Nós te damos total cobertura.

Espere um minuto, meu aplicativo ainda não foi compilado!

Eu estou tentando compilar meu código, mas fico recebendo erros semelhantes a este:

Erros de compilação do MQ

Se seu código não estiver sendo compilado por qualquer motivo, estes são os principais culpados:

  • Você tem um JDK instalado para usar javac? Tente digitar java -version em uma linha de comandos para verificar.
  • Você tem o jms.jar e o com.ibm.mq.allclient.jar disponíveis?
  • Verifique seu caminho de classe. Você digitou o local dos jars corretamente?
  • Certifique-se de que você esteja usando os separadores de diretório de arquivo corretos para seu sistema operacional nos comandos.

Me ajuda! Eu recebi um código de razão do MQ, o que eu faço agora?

Eu tentei executar meu código, mas só recebo exceções como essas:

Exceção de amostra do MQ

A análise dos detalhes da exceção pode fornecer muitas informações. No exemplo acima, é possível ver as informações de conexão que o aplicativo está tentado usar, o nome do gerenciador de filas, o modo de conexão, o nome do host e a porta. Ela também fornece algumas informações sobre qual pode ser o problema. Na sétima linha, é possível ver o código de retorno emitido para o ponto em que o aplicativo falhou, nesse caso 2035. Uma lista de códigos de razão do MQ está documentada aqui

Os logs de erro do gerenciador de filas do IBM MQ são um ótimo local para obter mais detalhes sobre o problema que ocorreu. Basicamente, estamos procurando o que deu errado sob a perspectiva do gerenciador de filas. Os logs de erro estão localizados no diretório de dados do MQ no sistema no qual o gerenciador de filas está em execução.

Nos contêineres do Docker:

docker exec -ti <container_id> /bin/bash
cd /var/mqm/qmgrs/<your_queue_manager_name>/errors/

No Linux:

cd /var/mqm/qmgrs/<your_queue_manager_name>/errors/

Nos sistemas Windows:

cd <mq_installation_path>\QMGRS\<your_queue_manager_name>\ERRORS\

Em seguida, examinaremos o arquivo do log de erros. As entradas de log mais recentes são incluídas na parte inferior do arquivo. É possível usar um editor para visualizar os logs ou, por exemplo, no Docker ou no Linux:

cat AMQERR01.LOG

A seguir é possível ver uma entrada de quando um código de retorno 2035 foi produzido:

Entrada do log de erros de amostra do MQ

Problemas de conexão

Uma das áreas mais comuns para encontrar problemas é na conexão inicial. Isso forneceria um código de razão como o código de razão 2538 MQRC_HOST_NOT_AVAILABLE ou 2059 MQRC_Q_MGR_NOT_AVAILABLE do MQ. Existem alguns locais onde erros podem ser apresentados. Alguns pontos iniciais a serem examinados são:

  • Verifique se é possível efetuar ping no host no qual o gerenciador de filas está em execução.

  • Verifique se você está usando a porta correta para a conexão com o gerenciador de filas.

    O aplicativo MQ Badge Challenge usará 1414, a menos que você configure a variável de ambiente MQ_BADGE_QM_PORT para algo diferente. Pode ser necessário fazer isso se você não conseguir usar a porta 1414 por qualquer motivo, por exemplo, se você tiver várias instâncias do Docker ou gerenciadores de filas em execução e a porta 1414 já estiver sendo usada. Para usar um número da porta diferente, é necessário expor uma porta diferente. É possível, então, configurar sua variável de ambiente da porta.

    Em um terminal do Windows:

      set MQ_BADGE_QM_PORT=<your_port>
    

    No Linux:

      export MQ_BADGE_QM_PORT=<your_port>
    
  • Verifique se você está usando o host correto para a conexão com o gerenciador de filas.

    O aplicativo MQ Badge Challenge usará ‘localhost’, a menos que você configure a variável de ambiente MQ_BADGE_QM_HOSTNAME para algo diferente. Poderá ser necessário fazer isso se você estiver executando seu gerenciador de filas em uma versão mais antiga do Docker. A versão mais recente do Docker mapeia o endereço IP do host para o host local, no entanto, o kit de ferramentas do Docker, que é a opção atual para executar o Docker no Windows 7, mapeia o IP do host para o endereço IP da Máquina Virtual. Para localizar esse endereço IP, é possível executar o seguinte comando no Docker:

      docker-machine ip
    

    É possível, então, executar este comando em um terminal do Windows para que esse endereço do host seja usado em seu aplicativo:

      set MQ_BADGE_QM_HOSTNAME=<your_ip_address>
    
  • Verifique se você está usando o gerenciador de filas e os nomes de canal corretos em seus detalhes de conexão de aplicativo. Eles fazem distinção entre maiúsculas e minúsculas. No aplicativo MQ Badge Challenge, as variáveis de ambiente MQ_BADGE_QM_NAME e MQ_BADGE_QM_CHANNEL também foram externalizadas, caso você não deseje usar os valores padrão.

  • Verifique se seu gerenciador de filas está em execução:

    No sistema no qual seu gerenciador de filas está hospedado, execute o comando dspmq diretamente em uma janela do terminal:

      dspmq
    

    Para instâncias do Docker, você usaria o seguinte comando para obter acesso à linha de comandos e executar o dspmq:

      docker exec -ti <container_id> dspmq
    

    A saída do dspmq é uma lista dos gerenciadores de filas no sistema e seus status:

    saída do dspmq

Erros de configuração

Meu aplicativo se conecta, mas falha ao ser executado.

As principais áreas a serem verificadas cuidadosamente são se todos os seus nomes de objeto do MQ correspondem ao esperado. Por exemplo, o seguinte erro é produzido quando o nome da fila errado é fornecido:

Erro do MQ para nome da fila errado

Nesse caso, os logs estão nos dizendo que a fila purchase_queue não existe. Em seguida, as etapas seriam verificar sua configuração usando runmqsc ou mudar seu código de acordo com a necessidade. Confira a seguir para obter mais informações sobre comandos do MQSC.

Problemas de segurança

Outra área comum que pode causar problemas é a autenticação. Os problemas de segurança geralmente retornam um código de razão de AMQ2035 2035 MQRC_NOT_AUTHORIZED. Se você vir isso, saberá que houve uma tentativa de conexão, mas provavelmente há algo de errado com o nome de usuário ou a senha que está sendo usada. A análise dos logs de erro informará o ID do usuário que está sendo autenticado.

No aplicativo MQ Badge Challenge, o nome de usuário e a senha são codificados no aplicativo para serem fornecidos ao gerenciador de filas. Verifique se os valores corretos foram configurados. Se você estiver usando qualquer coisa diferente do nome de usuário e senha do aplicativo padrão, esses valores poderão ser alterados no código que é fornecido, ou os valores padrão poderão ser substituídos configurando as variáveis de ambiente MQ_BADGE_USERNAME e MQ_BADGE_PASSWORD

Para obter mais informações, leia a documentação do produto IBM MQ sobre a segurança do aplicativo cliente.

Erros de publicação/assinatura

Problemas com a publicação/assinatura geralmente ocorrem devido a um dos seguintes motivos:

  • As sequências de tópicos do assinante não correspondem ao publicador.
  • A assinatura foi criada após a publicação ter sido enviada.
  • Ocorreu um erro na publicação, mas não foi verificado pelo aplicativo de publicação.

Isso resultaria no não recebimento das mensagens que você estava esperando.

Interagir com o gerenciador de filas usando comandos do MQSC

Os comandos do MQSC permitem que você execute tarefas de administração para configurar seu gerenciador de filas e trabalhar com os objetos do gerenciador de filas, como canais e filas.

Pode ser realmente útil saber como descobrir sobre os atributos configurados nos diferentes objetos do MQ (por exemplo, qmgrs, filas ou canais), particularmente se você não está familiarizado com as configurações padrão. Uma das maneiras de fazer isso é usar o MQSC. Para obter mais informações, consulte “Administração usando comandos do MQSC” no Knoweldge Center.

Para instâncias do Docker, você precisará de acesso à linha de comandos no contêiner executando o gerenciador de filas:

docker exec -ti <container_id> /bin/bash

A partir daí (ou da linha de comandos de qualquer plataforma):

runmqsc <your_queue_manager_name>

Quando você vir a mensagem a seguir, a interface estará pronta para sua entrada:

Saída do MQSC

É possível usar o comando DISPLAY para explorar alguns dos objetos no MQ Badge Challenge. Por exemplo, DISPLAY CHANNEL(DEV.APP.SVRCONN), DISPLAY TOPIC(‘newTickets’) e DISPLAY QUEUE(‘purchase’).

A saída do comando DISPLAY QUEUE('purchase') será semelhante ao seguinte:

Saída do comando de fila de exibição

Atributos interessantes a serem observados aqui são maxdepth, que é o número de mensagens que a fila pode conter, e curdepth, que é o número de mensagens atualmente contidas na fila. Se o número de mensagens na fila atingir o maxdepth, o aplicativo falhará com um Código de Razão 2053 MQRC_Q_FULL do MQ. Algumas maneiras de resolver esse problema seriam aumentar o maxdepth padrão de 5000 ou certificar-se de que o aplicativo de envio possa lidar com um código de razão 2053 (MQRC_Q_FULL), por exemplo, pausando o aplicativo ou colocando as mensagens em outra fila.

Interagir com o gerenciador de filas usando o MQ Console

Outra maneira de interagir com seus gerenciadores de filas é com o MQ Console. Além de poder procurar e mudar atributos de objeto, também é possível usar o Console para ajudar a validar sua configuração colocando uma mensagem de teste em uma fila. (Outra maneira de validar sua configuração seria executar as amostras, como amqsputc, caso você possua acesso a elas.)

Não estou conseguindo acessar o meu navegador.

  • Você pode achar que acessar https://localhost:9443/ibmmq/console/ não funciona se você estiver executando seu gerenciador de filas no Docker. Use o comando docker-machine ip do Docker para verificar o endereço IP que você deve usar no lugar de localhost.

  • Verifique se a porta 9443 foi designada para o MQ Console usar ao iniciar seu contêiner. Certifique-se de que você esteja usando o número da porta correto, caso tenha alterado por qualquer motivo.

Resumo

Este artigo abordou os tipos de erros mais comuns em aplicativos IBM MQ. Parabéns! Você depurou como um profissional e está tudo funcionando totalmente. Avance e desenvolva.

Para obter mais informações sobre resolução de problemas:

Aviso

O conteúdo apresentado aqui foi traduzido da página do IBM Developer nos EUA. É possível conferir o conteúdo original em este link.