Hoja de referencia de IBM MQ para desarrolladores

Este es el escenario: acabas de desarrollar tu aplicación, la compilaste y la ejecutaste por primera vez. ¡Qué emocionante! Oh no, algo no está bien, generó un mensaje de error.

¡No te asustes! Les ocurre a los mejores desarrolladores.

Es la hora de depurar, pero ¿por dónde deberíamos empezar?

Una aplicación puede dar error por muchas razones, así que ¿cómo sabemos si es un problema con el código del mensaje, las llamadas a la API de MQ o con objetos relacionados con MQ?

Si tu mensaje de error contiene un código de motivo de MQ, por ejemplo, AMQ2035 2035 MQRC_NOT_AUTHORIZED, probablemente algo fue mal con la interacción con MQ.

A menudo el mensaje muestra claramente cuál fue el error, es posible corregir el código y continuar. Sin embargo, a veces hace falta depurar un poco más. La siguiente sección enseña algunos pasos básicos de la depuración y proporciona algunos consejos para seguir adelante.

Problemas o errores comunes

Revisaremos algunos problemas comunes con los que se encontrarán la mayoría de los desarrolladores más novatos de aplicaciones de MQ, desde errores de compilación a problemas con la conexión, pasando por errores de configuración, a problemas de seguridad. Te tenemos cubierto.

Espera un minuto, ¡mi aplicación todavía no se compiló!

Intenté compilar mi código, pero no paro de recibir errores de este tipo:

Errores de compilación de MQ

Si tu código no está compilado por alguna razón, estas son algunas de las razones más habituales:

  • ¿Tienes instalado un JDK para utilizar javac? Para comprobarlo, teclea java -version en una línea de comando.
  • ¿Tienes disponible jms.jar y com.ibm.mq.allclient.jar?
  • Comprueba tu classpath. ¿Tecleaste correctamente la ubicación de los jars?
  • Asegúrate de que estás utilizando los separadores correctos del directorio de archivos de tu sistema operativo en los comandos.

¡Ayuda! Tengo un código de motivo de MQ, ¿qué hago ahora?

Intenté ejecutar mi código, pero lo único que obtengo son excepciones como las siguientes:

Excepción de muestra de MQ

En los detalles de la excepción se puede encontrar mucha información. En el ejemplo anterior es posible ver la información de la conexión que la aplicación está intentando utilizar, como el nombre del gestor de filas, el modo de conexión y el nombre y el puerto del anfitrión. También proporciona información sobre cuál puede ser el problema. En la línea siete es posible ver el código de retorno enviado para el punto en el que la aplicación falló, en este caso, el 2035. Aquí se documenta una lista de códigos de motivos de MQ

Los registros de errores del gestor de filas de IBM MQ son un gran lugar donde obtener más información sobre el problema que ocurrió. Básicamente, estamos buscando lo que salió mal desde la perspectiva del gestor de filas. Los registros de errores se encuentran en el directorio de datos de MQ en el sistema en el que se ejecuta el gestor de filas.

En los contenedores de Docker:

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

En Linux:

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

En los sistemas Windows:

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

Después, echamos un vistazo en la bitácora de errores. Las entradas más recientes del registro se añaden en su parte inferior. Es posible utilizar un editor para visualizar los registros o, por ejemplo, en Docker o Linux:

cat AMQERR01.LOG

Acá es posible ver una entrada de cuando se produjo un código de retorno 2035:

Muestra de entrada de registro de error de MQ

Problemas de conexión

Una de las áreas más habituales en las que se producen problemas es la conexión inicial. Esto te proporcionaría un código de motivo como MQ Reason Code 2538 MQRC_HOST_NOT_AVAILABLE o 2059 MQRC_Q_MGR_NOT_AVAILABLE. Se pueden producir errores en algunos lugares, algunas de las primeras cosas que se deben buscar son:

  • Comprueba que es posible hacer ping al anfitrión en el que se ejecuta el gestor de filas.

  • Comprueba que estás utilizando el puerto correcto para la conexión para el gestor de filas.

    La aplicación MQ Badge Challenge utilizará 1414 salvo que establezcas que la variable de entorno MQ_BADGE_QM_PORT sea algo diferente. Puede ser necesario hacer esto si no es posible utilizar el 1414 por alguna razón, por ejemplo, si estás ejecutando varias instancias de Docker o gestores de filas y ya se está usando el puerto 1414. Para utilizar un número de puerto diferente, es necesario exponer uno. Después es posible establecer la variable entorno del puerto.

    En un terminal de Windows:

      set MQ_BADGE_QM_PORT=<your_port>
    

    En Linux:

      export MQ_BADGE_QM_PORT=<your_port>
    
  • Comprueba que estás utilizando el anfitrión correcto para la conexión para el gestor de filas.

    La aplicación MQ Badge Challenge utilizará ‘localhost’ salvo que establezcas que la variable de entorno MQ_BADGE_QM_HOSTNAME sea algo diferente. Puede ser necesario hacer esto si estás ejecutando el gestor de filas en una versión anterior de Docker. La versión más reciente de Docker correlaciona la dirección IP del anfitrión con localhost, sin embargo, Docker Toolkit, que es la opción actual para la ejecución de Docker en Windows 7, correlaciona la IP del anfitrión con la dirección IP de la máquina virtual. Para encontrar la dirección IP es posible ejecutar el siguiente comando en Docker:

      docker-machine ip
    

    Después, es posible ejecutar este comando en un terminal de Windows para utilizar esta dirección de anfitrión en la aplicación:

      set MQ_BADGE_QM_HOSTNAME=<your_ip_address>
    
  • Comprueba que estás utilizando los nombres correctos del canal y del gestor de filas en la información de conexión de la aplicación. Son sensibles a mayúsculas y minúsculas. En la aplicación MQ Badge Challenge, las variables de entorno MQ_BADGE_QM_NAME y MQ_BADGE_QM_CHANNEL también se han externalizado por si no se quiere utilizar los valores predeterminados.

  • Comprueba que tu gestor de filas se está ejecutando:

    En el sistema donde está alojado tu gestor de filas, ejecuta el comando dspmq directamente en una ventana de terminal:

      dspmq
    

    Para las instancias de Docker, usarías el siguiente comando para obtener acceso a la línea de comando y ejecutar dspmq:

      docker exec -ti <container_id> dspmq
    

    El resultado de dspmq es una lista de los gestores de filas del sistema y de sus estados:

    salida de dspmq

Errores de configuración

Mi aplicación se conecta, pero no se ejecuta

Lo principal que hay que comprobar con cuidado es si todos los nombres de objetos de MQ coinciden con lo que se espera. Por ejemplo, cuando se proporciona el nombre de fila equivocado, se produce el siguiente error:

Error de MQ para nombre de fila incorrecto

En este caso, los registros nos dicen que la fila purchase_queue no existe. Los siguientes pasos serían comprobar la configuración utilizando runmqsc o cambiar el código en consecuencia. Ve a continuación para obtener más información sobre comandos de MQSC.

Problemas de seguridad

Otra área en la que se suelen producir problemas es la autenticación. Los problemas de seguridad normalmente devuelven el código de motivo AMQ2035 2035 MQRC_NOT_AUTHORIZED. Si ves esto, sabrás que intentó hacer una conexión, pero probablemente hay un problema con el nombre o la contraseña que se utilizaron. Si miras a los registros de errores verás el ID de usuario que se está autenticando.

En la aplicación MQ Badge Challenge, el nombre de usuario y la contraseña se incluyen en el código de la aplicación que se va a suministrar al gestor de filas. Comprueba que se enviaron los valores correctos. Si no estás utilizando el nombre de usuario y la contraseña predeterminados de la aplicación, es posible cambiar estos valores en el código que te proporcionamos o sobrescribirlos estableciendo las variables de entorno MQ_BADGE_USERNAME y MQ_BADGE_PASSWORD

Para más información, lee la documentación del producto IBM MQ acerca de la seguridad de la aplicación cliente.

Errores de publicar/suscribir

Los problemas con publicar/suscribir normalmente se deben a una de las siguientes razones:

  • Las cadenas de caracteres del tema del suscriptor no coinciden con las del publicador.
  • El suscriptor se creó después del envío de la publicación.
  • En la publicación ocurrió un error que no fue comprobado por la aplicación de publicación.

Esto podría hacer que no recibas los mensajes que estás esperando.

Interactúa con el gestor de filas por medio de comandos MQSC

Los comandos MQSC te permiten realizar tareas administrativas para configurar tu gestor de filas y trabajar con objetos del gestor de filas, como canales y filas.

Pueden ser realmente útiles para descubrir atributos que se establecieron en diferentes objetos de MQ (por ejemplo, qmgrs, filas o canales), especialmente si no estás familiarizado con las configuraciones predeterminadas. Una de las formas de hacerlo es por medio de MQSC. Para más información, ve «Administrar con comandos MQSC» del Knoweldge Center.

Para las instancias de Docker, se necesita acceso de línea de comando en el contenedor que ejecuta el gestor de filas:

docker exec -ti <container_id> /bin/bash

Desde aquí (o en la línea de comando de cualquier plataforma):

runmqsc <your_queue_manager_name>

Cuando veas el siguiente mensaje, la interfaz estará lista para que escribas:

Salida de MQSC

Es posible utilizar el comando DISPLAY para explorar algunos de los objetos del MQ Badge Challenge. Por ejemplo, DISPLAY CHANNEL(DEV.APP.SVRCONN), DISPLAY TOPIC(‘newTickets’) y DISPLAY QUEUE(‘purchase’).

El resultado del comando DISPLAY QUEUE('purchase') se parecerá a este:

Resultado del comando display queue

Los atributos interesantes a observar aquí son maxdepth, que es el número de mensajes que la fila puede contener; y curdepth, que es el número de mensajes que contiene actualmente la fila. Si el número de mensajes de la fila llega a ser igual a maxdepth, la aplicación lanzará un error con el código de motivo de MQ 2053 MQRC_Q_FULL. Un par de maneras de solucionar este problema sería incrementar el maxdepth predeterminado de 5000, o asegurarse de que la aplicación pueda encargarse de un código de motivo 2053 (MQRC_Q_FULL), por ejemplo, pausando la aplicación o poniendo los mensajes en otra fila.

Interactúa con el gestor de filas por medio de la consola de MQ

Otra forma de interactuar con el gestor de filas es con la consola de MQ. Es posible utilizar la consola para ayudar en la validación de la configuración poniendo un mensaje de prueba en una fila, además de poder buscar y cambiar atributos de los objetos. (Otra forma de validar la configuración es ejecutando las muestras, como amqsputc, si se tiene acceso a ellas).

No me puedo conectar con mi navegador

  • Si estás ejecutando tu gestor de filas en Docker, es posible que no te funcione si vas a https://localhost:9443/ibmmq/console/. Utiliza el comando docker-machine ip de Docker para conocer qué dirección IP debes utilizar en vez de localhost.

  • Comprueba si el puerto 9443 ha sido asignado para que lo utilice la consola de MQ cuando inicias tu contenedor. Si por alguna razón cambiaste el número de puerto, asegúrate de que estás usando el correcto.

Resumen

Este artículo cubrió los tipos de errores más habituales de las aplicaciones IBM MQ. ¡Felicidades! Depuraste como un profesional y todo funciona perfectamente. Continúa y desarrolla.

Para obtener más información sobre resolución de problemas:

Aviso

El contenido aquí presentado fue traducido de la página IBM Developer US. Puede revisar el contenido original en este link.