1. Tipos de canal

TipoDireçãoUso
SDR (Sender)Sai do QM local → QM remotoEnvia mensagens da transmission queue para outro QM
RCVR (Receiver)Chega no QM localRecebe mensagens de um canal SDR remoto
RQSTR (Requester)Inicia conexão para receberSolicita mensagens de um canal SDR/SVRCONN
SVR (Server)Responde ao RQSTRAceita conexões de Requester
CLUSSDRCluster senderCanal automático em cluster MQ
CLUSRCVRCluster receiverCanal automático em cluster MQ
SVRCONN (Server Connection)Lado servidorAceita conexões de clientes MQ (MQ Explorer, apps Java)
CLNTCONN (Client Connection)Lado clienteDefine 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âmetroDescriçã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 / MREXITMessage 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):

StatusSignificado
RUNNINGCanal ativo e transmitindo
STOPPEDCanal parado manualmente
RETRYINGTentando reconectar após falha
BINDINGEstabelecendo conexão TCP
INACTIVEDesconectado por inatividade (DISCINT)
IN-DOUBTEstado 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)