IBM MQ · Conectividade
Canais e Conectividade no IBM MQ
18 min de leitura
Nível: Intermediário
Canais são as conexões do IBM MQ — eles transportam mensagens entre Queue Managers (canais de mensagem) e conectam aplicações ao Queue Manager (canais de cliente). Entender os tipos de canal e como configurá-los é essencial para integrar sistemas: o mainframe enviando para um servidor distribuído, uma aplicação Java conectando ao MQ do z/OS, ou dois Queue Managers trocando mensagens continuamente.
1. Tipos de canal
| Tipo | Direção | Uso |
SDR (Sender) | Sai do QM local → QM remoto | Envia mensagens da transmission queue para outro QM |
RCVR (Receiver) | Chega no QM local | Recebe mensagens de um canal SDR remoto |
RQSTR (Requester) | Inicia conexão para receber | Solicita mensagens de um canal SDR/SVRCONN |
SVR (Server) | Responde ao RQSTR | Aceita conexões de Requester |
CLUSSDR | Cluster sender | Canal automático em cluster MQ |
CLUSRCVR | Cluster receiver | Canal automático em cluster MQ |
SVRCONN (Server Connection) | Lado servidor | Aceita conexões de clientes MQ (MQ Explorer, apps Java) |
CLNTCONN (Client Connection) | Lado cliente | Define conexão de um cliente MQ para o QM |
2. SDR e RCVR — canal de mensagem
O par SDR/RCVR é o mais comum para troca de mensagens entre Queue Managers:
/* No QM1 (z/OS) — Sender */
DEFINE CHANNEL(QM1.TO.QM2) CHLTYPE(SDR)
CONNAME('192.168.1.50(1415)')
XMITQ(TO.QM2)
TRPTYPE(TCP)
DESCR('Canal de QM1 para QM2')
CONVERT(YES)
DISCINT(6000)
/* No QM2 (servidor distribuído) — Receiver */
DEFINE CHANNEL(QM1.TO.QM2) CHLTYPE(RCVR)
TRPTYPE(TCP)
DESCR('Recebe de QM1')
Parâmetros importantes do canal SDR:
| Parâmetro | Descrição |
CONNAME('host(porta)') | Endereço TCP/IP e porta do QM remoto |
XMITQ(fila) | Transmission Queue que alimenta este canal |
CONVERT(YES/NO) | Converter CCSID (codepage) automaticamente |
DISCINT(n) | Segundos sem atividade antes de desconectar (0 = nunca) |
RETRYINT(n) | Intervalo de retry em segundos se a conexão falhar |
MRDATA / MREXIT | Message retry exit — lógica customizada de retry |
💡 CONVERT e CCSID no mainframe
O z/OS usa EBCDIC (CCSID 500 ou 037), enquanto servidores Linux/Windows usam ASCII (CCSID 819 ou 1208). Com CONVERT(YES), o MQ converte automaticamente o payload de texto entre os CCSIDs dos dois sistemas. Para dados binários (XML, JSON em UTF-8), configure o CCSID correto na estrutura MQMD da mensagem.
3. SVRCONN e CLNTCONN — canal de cliente
O par SVRCONN/CLNTCONN conecta aplicações cliente (MQ Explorer, apps Java/JMS) diretamente ao Queue Manager sem precisar instalar um QM local:
/* No QM1 (z/OS) — Server Connection */
DEFINE CHANNEL(SISTEMA.SVRCONN) CHLTYPE(SVRCONN)
TRPTYPE(TCP)
MCAUSER('')
DESCR('Conexoes de aplicacoes cliente')
/* Aplicacao Java/JMS configura a conexao com esses dados:
Host: ip-do-mainframe
Porta: 1415 (porta do listener)
QMgr: CSQ1
Channel: SISTEMA.SVRCONN
4. Listener TCP/IP
O listener é o processo que fica escutando conexões TCP/IP de entrada. No z/OS, o listener é gerenciado pelo Channel Initiator:
/* Criar listener na porta 1415 */
DEFINE LISTENER(CSQ1.LISTENER)
TRPTYPE(TCP)
PORT(1415)
IPADDR(' ')
DESCR('Listener principal CSQ1')
/* Iniciar o listener */
START LISTENER(CSQ1.LISTENER)
/* Verificar status */
DISPLAY LSSTATUS(CSQ1.LISTENER)
Saída:
LISTENER(CSQ1.LISTENER) STATUS(RUNNING)
PORT(1415) TRPTYPE(TCP)
5. START, STOP e DISPLAY CHSTATUS
Canais precisam ser iniciados para funcionar e podem ser parados para manutenção:
/* Iniciar canal SDR */
START CHANNEL(QM1.TO.QM2)
/* Parar canal de forma limpa */
STOP CHANNEL(QM1.TO.QM2)
/* Parar forçado */
STOP CHANNEL(QM1.TO.QM2) MODE(FORCE)
/* Verificar status de todos os canais */
DISPLAY CHSTATUS(*)
/* Status detalhado de um canal */
DISPLAY CHSTATUS(QM1.TO.QM2) ALL
Saída de DISPLAY CHSTATUS:
CHANNEL(QM1.TO.QM2) CHLTYPE(SDR)
STATUS(RUNNING) SUBSTATE(MQGET)
XMITQ(TO.QM2) CONNAME(192.168.1.50(1415))
MSGS(15234) BYTES(45702000)
LSTMSGDA(2026-06-18) LSTMSGTM(14.55.03)
Estados possíveis de um canal (STATUS):
| Status | Significado |
RUNNING | Canal ativo e transmitindo |
STOPPED | Canal parado manualmente |
RETRYING | Tentando reconectar após falha |
BINDING | Estabelecendo conexão TCP |
INACTIVE | Desconectado por inatividade (DISCINT) |
IN-DOUBT | Estado incerto — unidade de trabalho pendente |
6. Exemplo completo QM1 → QM2
Configuração completa para enviar mensagens do QM1 (z/OS) para QM2 (Linux):
/* ── No QM1 (z/OS) ──────────────────────────────────────── */
/* 1. Transmission queue */
DEFINE QLOCAL(TO.QM2) USAGE(XMITQ) DEFPSIST(YES)
/* 2. Remote queue apontando para fila no QM2 */
DEFINE QREMOTE(PEDIDOS.QM2)
RNAME('FILA.PEDIDOS') RQMNAME('QM2') XMITQ('TO.QM2')
/* 3. Canal sender */
DEFINE CHANNEL(QM1.TO.QM2) CHLTYPE(SDR)
CONNAME('linux-server(1415)') XMITQ(TO.QM2) CONVERT(YES)
/* 4. Iniciar */
START CHANNEL(QM1.TO.QM2)
/* ── No QM2 (Linux) ─────────────────────────────────────── */
/* 1. Fila local receptora */
DEFINE QLOCAL(FILA.PEDIDOS) DEFPSIST(YES)
/* 2. Canal receiver */
DEFINE CHANNEL(QM1.TO.QM2) CHLTYPE(RCVR) TRPTYPE(TCP)
/* 3. Listener */
DEFINE LISTENER(QM2.LISTENER) TRPTYPE(TCP) PORT(1415)
START LISTENER(QM2.LISTENER)