☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta Middleware. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Middleware. Mostrar todas as mensagens

sexta-feira, 19 de junho de 2026

IBM MQ sem Mistérios: da Primeira Fila ao Salto Quântico da Integração Corporativa

 

Bellacosa Mainframe uma visao do ibm mq 10

☕ Um Café no Bellacosa Mainframe

IBM MQ sem Mistérios: da Primeira Fila ao Salto Quântico da Integração Corporativa

O guia do Programador COBOL Padawan para compreender mensagens, filas, Queue Managers, canais, segurança, clusters, containers e a evolução do MQSeries ao IBM MQ 10.0

Existe uma cena clássica em praticamente todo ambiente corporativo: de um lado, temos um programa COBOL executando tranquilamente no z/OS; do outro, uma aplicação Java, um aplicativo bancário, uma API escrita em Python, um sistema Linux, um serviço na nuvem ou algum microsserviço perdido dentro de um cluster Kubernetes.

Todos precisam conversar.

O problema é que eles não falam necessariamente a mesma língua, não estão ligados no mesmo horário, não possuem a mesma velocidade e, pior ainda, podem ficar indisponíveis justamente no momento em que a mensagem precisa ser entregue.

É aí que entra o IBM MQ.

O MQ funciona como uma espécie de Central de Comunicações da Frota Estelar. A USS Enterprise não precisa pousar em cada planeta para entregar uma ordem. Ela transmite a mensagem por uma infraestrutura preparada para transportar, proteger, armazenar e encaminhar a comunicação.

No mundo corporativo, o IBM MQ desempenha uma missão semelhante.

Ele permite que aplicações diferentes troquem informações com segurança, confiabilidade e independência. Um programa envia uma mensagem; o MQ armazena essa mensagem; outro programa a recebe quando estiver pronto.

A ideia parece simples.

Mas é justamente essa simplicidade que sustenta bancos, seguradoras, companhias aéreas, governos, varejistas, indústrias, sistemas de pagamento e inúmeras operações críticas ao redor do planeta.

Prepare sua caneca de café, ajuste o uniforme da Frota e ligue o terminal 3270. Nossa missão será atravessar mais de três décadas de evolução do IBM MQ, começando no antigo MQSeries e chegando ao IBM MQ 10.0.


Capítulo I — Antes do MQ: quando as aplicações precisavam esperar umas pelas outras

Imagine que um programa chamado PGMPED01 precise enviar um pedido para outro programa chamado PGMFAT01.

Sem mensageria, o primeiro programa poderia chamar diretamente o segundo:

PGMPED01 ───────────────► PGMFAT01
           chamada direta

Essa arquitetura pode funcionar enquanto tudo estiver perfeitamente disponível.

Mas o que acontece quando:

  • o segundo programa está parado;

  • a rede caiu;

  • o servidor remoto está em manutenção;

  • o processamento demora;

  • há milhares de solicitações simultâneas;

  • uma das aplicações é atualizada;

  • o sistema consumidor precisa ser transferido para outra plataforma?

Na comunicação direta, o produtor e o consumidor ficam fortemente acoplados.

O programa produtor precisa conhecer:

  • o endereço do consumidor;

  • o protocolo utilizado;

  • o formato esperado;

  • o tempo de resposta;

  • a condição de disponibilidade.

É como se o capitão de uma nave precisasse localizar pessoalmente cada tripulante para entregar uma ordem. Se o oficial estivesse dormindo, em missão externa ou preso no Holodeck, toda a operação ficaria bloqueada.

O MQ introduz um intermediário:

PGMPED01 ───► FILA.PEDIDOS ───► PGMFAT01

O produtor não entrega diretamente ao consumidor. Ele coloca a mensagem em uma fila.

O consumidor não precisa estar funcionando naquele instante. Quando estiver disponível, poderá retirar e processar a mensagem.

Esse é o coração da comunicação assíncrona.


Capítulo II — O que significa MQ?

MQ tornou-se associado a Message Queueing, ou enfileiramento de mensagens.

O produto começou como MQSeries em 1993, depois foi renomeado WebSphere MQ em 2002 e passou a se chamar IBM MQ em 2014. A solução cresceu de uma plataforma de filas para um conjunto completo de recursos de mensageria corporativa, disponível em z/OS, sistemas distribuídos, appliances, nuvem e containers. (Wikipedia)

Uma mensagem é uma unidade de informação enviada por uma aplicação.

Ela pode conter:

  • uma transação bancária;

  • um pedido de compra;

  • os dados de um cliente;

  • uma solicitação de pagamento;

  • uma notificação;

  • um evento de estoque;

  • um documento JSON;

  • um registro COBOL;

  • uma instrução para outro sistema;

  • até mesmo dados binários.

A fila é o local lógico onde essa mensagem aguarda processamento.

Pense em uma estação ferroviária.

Os passageiros são as mensagens.

A plataforma é a fila.

O trem é o canal de transporte.

A estação central é o Queue Manager.

Os fiscais são as regras de segurança.

O sistema de sinalização representa os mecanismos de confirmação, controle e recuperação.

No universo da Frota Estelar, podemos fazer outra analogia:

Mensagem        = ordem da missão
Fila            = caixa de comunicações
Queue Manager   = computador central da nave
Canal           = frequência de transmissão
Aplicação       = tripulante remetente ou destinatário

Capítulo III — A criatura mais importante: o Queue Manager

O Queue Manager, ou gerenciador de filas, é o coração operacional do IBM MQ.

Ele administra:

  • filas;

  • mensagens;

  • conexões;

  • canais;

  • segurança;

  • recuperação;

  • logs;

  • persistência;

  • transações;

  • entrega entre ambientes.

Um Queue Manager pode ser imaginado como uma agência central dos Correios. Ele conhece as caixas postais, controla o armazenamento e encaminha as mensagens para outros locais.

Exemplo conceitual:

+---------------------------------------+
|         QUEUE MANAGER QMZOS01         |
|                                       |
|  FILA.PEDIDOS                         |
|  FILA.PAGAMENTOS                      |
|  FILA.RESPOSTAS                       |
|  FILA.ERROS                           |
|                                       |
|  Canais, logs, segurança e controle   |
+---------------------------------------+

Um programa pode abrir uma fila e colocar uma mensagem usando uma chamada MQPUT.

Outro programa pode abrir a mesma fila e obter a mensagem usando MQGET.

Fluxo básico:

Programa produtor
      |
      | MQPUT
      v
FILA.PEDIDOS
      |
      | MQGET
      v
Programa consumidor

No mundo COBOL, essas operações podem ser efetuadas por meio da interface MQI, a Message Queue Interface.

Uma sequência lógica simplificada seria:

MQCONN  → conectar ao Queue Manager
MQOPEN  → abrir uma fila
MQPUT   → colocar uma mensagem
MQCLOSE → fechar a fila
MQDISC  → desconectar

Para consumir:

MQCONN  → conectar
MQOPEN  → abrir
MQGET   → obter a mensagem
MQCLOSE → fechar
MQDISC  → desconectar

Esse ciclo é quase um ritual de embarque:

  1. entrar na nave;

  2. abrir o canal;

  3. transmitir ou receber;

  4. fechar o canal;

  5. desembarcar.


Capítulo IV — 1993: nasce o MQSeries

A década de 1990 foi um período de enorme fragmentação tecnológica.

Empresas possuíam:

  • mainframes;

  • servidores Unix;

  • PCs;

  • bancos de dados diferentes;

  • sistemas departamentais;

  • aplicações cliente-servidor;

  • redes heterogêneas.

A comunicação entre essas plataformas era complicada.

O MQSeries surgiu para fornecer mensageria confiável entre sistemas distribuídos.

A grande inovação não era apenas transportar dados. Era permitir que a aplicação produtora continuasse trabalhando sem precisar esperar que a aplicação consumidora terminasse.

Veja a diferença.

Comunicação síncrona

Aplicação A chama Aplicação B
Aplicação A fica esperando
Aplicação B processa
Aplicação B responde
Aplicação A continua

Comunicação assíncrona

Aplicação A envia mensagem
Aplicação A continua trabalhando
Aplicação B processa quando puder

Esse desacoplamento oferece quatro liberdades importantes:

Liberdade de tempo

Produtor e consumidor não precisam estar ativos simultaneamente.

Liberdade de plataforma

Um pode estar no z/OS; o outro, no Linux.

Liberdade de velocidade

O produtor pode enviar rapidamente, enquanto o consumidor processa no próprio ritmo.

Liberdade de evolução

Uma aplicação pode ser modificada sem exigir alteração imediata na outra, desde que o contrato da mensagem seja preservado.

Essa filosofia permanece válida mesmo depois de três décadas.


Capítulo V — Mensagens persistentes: o diário de bordo que não pode desaparecer

Nem toda mensagem possui a mesma importância.

Uma notificação de temperatura pode eventualmente ser descartada.

Uma transferência bancária, não.

Por isso, o MQ diferencia mensagens persistentes e não persistentes.

Mensagem não persistente

É normalmente utilizada quando desempenho é mais importante e uma eventual perda pode ser tolerada.

Exemplos:

  • telemetria temporária;

  • atualização visual;

  • evento sem valor transacional;

  • informação que pode ser recriada.

Mensagem persistente

É protegida pelos mecanismos de log e recuperação do Queue Manager.

Exemplos:

  • pagamento;

  • transferência;

  • pedido;

  • alteração de conta;

  • movimentação contábil;

  • reserva de passagem.

Se o sistema falhar, a mensagem persistente pode ser recuperada.

É o equivalente ao diário de bordo da Enterprise. Mesmo que a nave sofra uma pane, as informações essenciais da missão não podem simplesmente evaporar no espaço.


Capítulo VI — Commit e Backout: quando o MQ entra na transação

O MQ também pode participar de unidades de trabalho.

Imagine que um programa COBOL:

  1. leia uma mensagem da fila;

  2. atualize uma tabela Db2;

  3. grave um registro;

  4. confirme a transação.

Se tudo funcionar:

COMMIT

A mensagem é definitivamente removida da fila e a atualização do banco é confirmada.

Se ocorrer um erro:

ROLLBACK ou BACKOUT

A atualização é desfeita e a mensagem pode retornar à fila para nova tentativa.

Esse comportamento é fundamental para evitar o pior cenário de integração:

Mensagem removida
+
Banco não atualizado
=
Transação perdida

Quando MQ e Db2 estão coordenados corretamente, o processamento pode obedecer ao princípio:

Ou tudo acontece, ou nada acontece.

É a famosa atomicidade transacional.

Nenhum oficial da Frota gostaria de registrar “torpedo disparado” sem que o torpedo tivesse realmente sido lançado — ou lançar o torpedo sem atualizar o diário da batalha.


Capítulo VII — Canais: as rotas interestelares do MQ

Quando dois Queue Managers precisam conversar, normalmente utilizam canais.

Exemplo:

QMZOS01 ───────────────► QMLNX01
        canal emissor

Em uma configuração distribuída clássica, podemos encontrar:

  • Sender Channel;

  • Receiver Channel;

  • Server Connection Channel;

  • Client Connection Channel;

  • Cluster Sender;

  • Cluster Receiver.

Um Sender Channel envia mensagens.

Um Receiver Channel recebe.

Um Server Connection Channel permite que uma aplicação cliente se conecte remotamente a um Queue Manager.

Para o Programador COBOL iniciante, a distinção essencial é:

Aplicação local
    usa o Queue Manager próximo

Queue Manager
    usa canais para conversar com outro Queue Manager

A aplicação não precisa conhecer todos os detalhes da rota.

Ela coloca a mensagem em uma fila. O MQ resolve o transporte segundo a configuração existente.

É como pedir ao computador da nave:

“Entregue esta mensagem à Base Estelar 12.”

O tripulante não precisa calcular cada dobra espacial, cada repetidor subespacial ou cada salto intermediário.


Capítulo VIII — Filas locais, remotas e de transmissão

Uma fila local armazena mensagens dentro do Queue Manager.

FILA.LOCAL.PEDIDOS

Uma definição de fila remota representa um destino existente em outro Queue Manager.

FILA.REMOTA.FATURAMENTO

Uma fila de transmissão armazena temporariamente mensagens destinadas a outro Queue Manager.

Fluxo simplificado:

Aplicação
   |
   v
Definição remota
   |
   v
Fila de transmissão
   |
   v
Sender Channel
   |
   v
Receiver Channel
   |
   v
Fila local no destino

Você pode imaginar a fila remota como o endereço da Base Estelar, enquanto a fila de transmissão funciona como o compartimento de carga onde as mensagens aguardam a próxima nave de transporte.


Capítulo IX — Final dos anos 1990: agrupamento e clustering

À medida que o MQ crescia, surgiram necessidades mais sofisticadas.

Uma delas era transportar conjuntos de mensagens relacionadas.

Imagine um pedido composto por:

  • cabeçalho;

  • cliente;

  • dez itens;

  • pagamento;

  • entrega.

Essas partes podem ser enviadas como mensagens separadas, mas precisam ser processadas como um grupo lógico.

Outro avanço importante foi o clustering.

Sem cluster:

Aplicação
   |
   v
Queue Manager único

Se esse Queue Manager sofrer uma interrupção, o caminho pode ficar indisponível.

Com um cluster:

                  ┌──► QM01
Aplicação ────────┼──► QM02
                  └──► QM03

O cluster oferece mecanismos para distribuir mensagens entre instâncias de filas disponíveis em diferentes Queue Managers.

Mas atenção, Padawan: cluster não é sinônimo automático de alta disponibilidade completa.

Ele ajuda na conectividade e distribuição de carga, mas o projeto ainda precisa considerar:

  • disponibilidade do Queue Manager;

  • armazenamento;

  • aplicações consumidoras;

  • rede;

  • recuperação de desastre;

  • persistência;

  • afinidade de mensagens;

  • monitoramento.

Essa é uma armadilha frequente.

Cluster não é magia Jedi. É arquitetura.


Capítulo X — 2002: a era WebSphere MQ

Em 2002, o produto passou a integrar a família WebSphere e recebeu o nome WebSphere MQ. A mudança refletia o período em que arquiteturas Java, J2EE, serviços Web e integração corporativa ganhavam enorme importância. (Wikipedia)

Era a era da SOA: Service-Oriented Architecture.

A empresa deixava de pensar apenas em programas isolados e passava a organizar funcionalidades como serviços.

Exemplo:

Serviço de Cliente
        |
        v
       MQ
        |
        v
Serviço de Crédito
        |
        v
       MQ
        |
        v
Serviço de Faturamento

O MQ tornou-se um elemento essencial para conectar serviços sem criar dependências rígidas.

Muito antes de expressões como “microsserviços” e “cloud native” dominarem as conferências, o MQ já praticava princípios que permanecem modernos:

  • desacoplamento;

  • comunicação assíncrona;

  • contratos de mensagem;

  • tolerância a falhas;

  • processamento distribuído;

  • segurança;

  • rastreabilidade.

Curiosidade: vários conceitos vendidos hoje como novidades absolutas já frequentavam os corredores do mainframe quando muito desenvolvedor moderno ainda usava conexão discada.


Capítulo XI — Publish/Subscribe: uma mensagem para muitos ouvintes

No modelo tradicional de fila, uma mensagem é normalmente consumida por um consumidor.

Produtor ───► Fila ───► Consumidor

No modelo Publish/Subscribe, o produtor publica uma informação em um tópico.

Vários assinantes podem recebê-la.

                         ┌──► Assinante A
Publicador ──► Tópico ───┼──► Assinante B
                         └──► Assinante C

Exemplo: uma transação de venda foi concluída.

O evento pode interessar a:

  • estoque;

  • faturamento;

  • logística;

  • análise de fraude;

  • programa de fidelidade;

  • data lake;

  • sistema de notificações.

Em vez de o sistema de vendas chamar seis aplicações diferentes, ele publica um evento:

VENDA.CONCLUIDA

Cada assinante recebe e processa a informação segundo sua finalidade.

Essa arquitetura reduz acoplamento e facilita a inclusão de novos consumidores.

A ponte da Enterprise anuncia:

“Alerta vermelho!”

Segurança, Engenharia, Enfermaria e Comando recebem o mesmo evento, mas cada departamento toma uma ação diferente.

Isso é Publish/Subscribe explicado pela Frota Estelar.


Capítulo XII — WebSphere MQ 7 e a abertura para JMS, MQTT e alta disponibilidade

A evolução do MQ acompanhou Java, dispositivos conectados e arquiteturas distribuídas.

JMS facilitou a integração com aplicações Java.

MQTT tornou-se especialmente importante em cenários de dispositivos leves e telemetria.

Imagine:

Sensor industrial
       |
       | MQTT
       v
Gateway ou infraestrutura de mensageria
       |
       v
IBM MQ
       |
       v
Sistema corporativo

Um sensor não precisa executar um cliente pesado. Ele pode publicar dados usando um protocolo enxuto, enquanto a infraestrutura corporativa recebe, converte, distribui e processa as informações.

O MQ começou como um mensageiro entre sistemas corporativos e evoluiu para participar de ecossistemas com:

  • dispositivos;

  • aplicações móveis;

  • sistemas web;

  • Java;

  • integração empresarial;

  • serviços externos.


Capítulo XIII — Segurança: não basta entregar, é preciso proteger

Em mensageria corporativa, temos pelo menos cinco perguntas fundamentais:

  1. Quem está se conectando?

  2. A pessoa ou aplicação está autenticada?

  3. Ela tem autorização para acessar a fila?

  4. A comunicação está criptografada?

  5. A mensagem pode ser auditada?

A segurança pode envolver:

  • TLS;

  • certificados;

  • autenticação;

  • autorização;

  • CHLAUTH;

  • CONNAUTH;

  • RACF no z/OS;

  • proteção de filas;

  • identidades de usuários;

  • políticas de Advanced Message Security;

  • registros e monitoramento.

No z/OS, o RACF pode controlar o acesso aos recursos do MQ.

Exemplo conceitual:

Usuário APPPED01
pode PUT em FILA.PEDIDOS

Usuário APPFAT01
pode GET em FILA.PEDIDOS

Usuário DESCONHECIDO
não pode acessar

Uma boa prática é seguir o princípio do menor privilégio.

O produtor não precisa necessariamente retirar mensagens.

O consumidor não precisa necessariamente colocar mensagens.

O operador não precisa ler o conteúdo comercial.

O auditor não precisa alterar configurações.

Cada tripulante deve possuir apenas os acessos necessários para a própria missão.

Dar autoridade total a todas as aplicações seria como distribuir códigos de autodestruição da Enterprise para qualquer cadete recém-chegado.


Capítulo XIV — Advanced Message Security e Managed File Transfer

O Advanced Message Security permite aplicar proteção à própria mensagem.

Isso é diferente de proteger somente o canal.

TLS protege a comunicação durante o transporte:

Aplicação A ===== canal protegido ===== MQ

A proteção no nível da mensagem pode manter o conteúdo protegido mesmo enquanto ele passa por intermediários.

É a diferença entre:

  • transportar uma carta dentro de um túnel seguro;

  • colocar a carta em um envelope que somente o destinatário pode abrir.

O Managed File Transfer utiliza a infraestrutura e os controles de MQ para transferências de arquivos gerenciadas.

Isso pode oferecer:

  • auditoria;

  • rastreabilidade;

  • automação;

  • segurança;

  • confirmação;

  • integração com processos;

  • tratamento de falhas.

Em muitas empresas, mover um arquivo não significa simplesmente executar FTP. É preciso saber:

  • quem enviou;

  • quando enviou;

  • qual era o tamanho;

  • se chegou;

  • se foi processado;

  • se houve erro;

  • se ocorreu nova tentativa.

O MFT transforma a transferência em uma operação governada.


Capítulo XV — 2014: nasce oficialmente o nome IBM MQ

Em 2014, o produto deixou a identidade WebSphere e passou a chamar-se IBM MQ. (Wikipedia)

A mudança simbolizou sua independência e amplitude.

O MQ já não era apenas uma peça de um conjunto de ferramentas web. Era uma plataforma de mensageria com identidade própria, presente em múltiplos sistemas operacionais e arquiteturas.

Nessa fase ganharam destaque recursos como:

  • interfaces administrativas modernas;

  • console web;

  • conectividade aprimorada;

  • appliances;

  • maior integração operacional.

O IBM MQ Appliance ofereceu uma forma integrada de executar mensageria em equipamento dedicado, reduzindo parte do trabalho de montagem da pilha de infraestrutura.

Para algumas organizações, isso significava receber uma espécie de “nave pronta para voar”, em vez de montar motor, casco, computador, escudos e sistema de dobra separadamente.


Capítulo XVI — LTS e Continuous Delivery

A partir da família 9, compreender os modelos de entrega tornou-se essencial.

LTS — Long Term Support

Destinado a organizações que priorizam estabilidade e permanência em uma linha de manutenção por um período prolongado.

A IBM define o LTS como o nível recomendado para ambientes que exigem máxima estabilidade. Atualizações LTS recebem correções de defeitos e segurança, enquanto novas capacidades chegam por novas bases LTS ou são incorporadas a partir da evolução do fluxo CD. (IBM)

CD — Continuous Delivery

Entrega funcionalidades com maior frequência.

Exemplos de numeração:

9.4.0 = base LTS
9.4.1 = CD
9.4.2 = CD
9.4.3 = CD

A IBM explica que versões LTS utilizam normalmente o nível de modificação zero, enquanto as entregas CD utilizam níveis subsequentes. (IBM)

A escolha depende da missão.

Um banco com processos rígidos pode preferir LTS.

Um laboratório, uma equipe de inovação ou um ambiente que necessita rapidamente de determinada capacidade pode adotar CD.

Não existe “melhor” universal.

Existe o modelo adequado ao risco, governança e velocidade da organização.


Capítulo XVII — IBM MQ 9.1, 9.2, 9.3 e 9.4: o MQ entra definitivamente na era híbrida

A família 9 consolidou o MQ dentro do novo universo tecnológico:

  • containers;

  • Docker;

  • Kubernetes;

  • OpenShift;

  • REST;

  • JSON;

  • autenticação moderna;

  • observabilidade;

  • automação;

  • integração híbrida.

O IBM MQ 9.4 LTS tornou-se disponível em junho de 2024. Entre suas capacidades estavam melhorias administrativas, ampliação de escalabilidade no channel initiator do z/OS, aprimoramentos nos registros SMF, evolução do console e mensageria remota por REST API. (IBM)

Observe o que isso representa.

Um produto nascido em 1993 consegue operar em um ambiente com:

COBOL + CICS + Db2 + z/OS
              |
              v
             MQ
              |
              v
Java + Spring Boot + OpenShift + Kubernetes

Não foi necessário jogar fora o mainframe.

Não foi necessário reescrever todos os programas COBOL.

Foi criada uma ponte.

Essa é uma das maiores lições do MQ: modernização não significa necessariamente substituição.

Muitas vezes, modernizar significa expor, integrar, proteger, automatizar e observar melhor aquilo que já funciona.


Capítulo XVIII — 2026: IBM MQ 10.0 entra em cena

O IBM MQ 10.0 LTS foi anunciado em abril de 2026 e disponibilizado em junho de 2026, sucedendo o IBM MQ 9.4.0 LTS e a última entrega CD da linha 9.4, a versão 9.4.5. (IBM)

A versão reforça uma mensagem importante:

O MQ não está sendo mantido apenas por compatibilidade. Ele continua evoluindo para enfrentar novos problemas corporativos.

Entre os avanços documentados para o MQ 10.0 aparecem recursos ligados a:

  • conectividade simplificada com a nuvem;

  • melhorias de console;

  • recuperação de site alternativo;

  • monitoramento de Native HA;

  • tracing integrado com OpenTelemetry;

  • aprimoramentos administrativos;

  • segurança;

  • containers;

  • resiliência. (IBM)

No campo da segurança, o MQ 10.0 também trouxe suporte a mecanismos de troca de chaves quantum-safe baseados em FIPS 203 e ML-KEM para canais TLS 1.3 em plataformas compatíveis. A finalidade é ajudar a proteger comunicações contra o cenário conhecido como “coletar agora e descriptografar depois”. (IBM)

Aqui está o grande salto histórico:

1993: transportar mensagens entre aplicações

2026: transportar mensagens com integração híbrida,
observabilidade, automação, segurança moderna,
containers e preparação criptográfica para o futuro

A missão original permaneceu.

A nave ganhou novos motores.


Capítulo XIX — Exemplo completo: um pagamento processado por COBOL

Considere um aplicativo de pagamento.

O cliente realiza uma transferência.

Etapa 1 — Aplicativo envia a solicitação

{
  "contaOrigem": "12345",
  "contaDestino": "98765",
  "valor": 150.00
}

Etapa 2 — API valida o formato

A API verifica token, campos obrigatórios e limites básicos.

Etapa 3 — API publica no MQ

FILA.PAGAMENTOS.ENTRADA

Etapa 4 — Programa COBOL consome

Um programa CICS ou batch executa MQGET.

Etapa 5 — Regra de negócio é aplicada

O programa verifica:

  • saldo;

  • situação da conta;

  • limite;

  • bloqueios;

  • antifraude;

  • dados cadastrais.

Etapa 6 — Db2 é atualizado

UPDATE CONTA
SET SALDO = SALDO - :VALOR
WHERE NUM_CONTA = :ORIGEM

Etapa 7 — Transação é confirmada

Se tudo funcionar:

COMMIT

Etapa 8 — Resposta é publicada

FILA.PAGAMENTOS.RESPOSTA

Etapa 9 — Aplicativo recebe a confirmação

{
  "status": "APROVADO",
  "codigo": "TX458902"
}

Agora suponha que o programa COBOL esteja indisponível durante três minutos.

A API não precisa perder o pagamento.

A mensagem pode permanecer na fila até que o consumidor retorne.

Esse é o verdadeiro poder do desacoplamento temporal.


Capítulo XX — Dead-letter queue: o cemitério que precisa ser investigado

Quando uma mensagem não consegue chegar ao destino, ela pode ser encaminhada para a Dead-Letter Queue.

Mas cuidado com o nome.

Ela não deve ser tratada como um lixão.

Uma mensagem na DLQ representa uma anomalia:

  • destino inexistente;

  • fila cheia;

  • erro de roteamento;

  • configuração incorreta;

  • autorização;

  • canal indisponível;

  • definição remota errada.

Uma DLQ ignorada é como uma cápsula de fuga à deriva. Pode parecer apenas um ponto luminoso no radar, mas talvez contenha informações vitais.

Boas práticas:

  • monitore a DLQ;

  • investigue o motivo;

  • corrija a causa;

  • reencaminhe quando apropriado;

  • mantenha trilha de auditoria;

  • evite simplesmente apagar.


Capítulo XXI — Backout Queue: a mensagem Klingon indestrutível

Imagine que uma mensagem defeituosa seja lida por um programa.

O programa falha.

A transação executa rollback.

A mensagem retorna à fila.

O programa lê novamente.

Falha novamente.

Isso pode criar um loop:

GET
erro
ROLLBACK
GET
erro
ROLLBACK
GET
erro
ROLLBACK

Para evitar esse ciclo, é possível utilizar mecanismos de backout.

Após determinada quantidade de tentativas, a mensagem pode ser movida para uma fila de exceção:

FILA.PAGAMENTOS.BACKOUT

Essa mensagem é frequentemente chamada de poison message.

Ela não é literalmente venenosa, mas provoca falha repetitiva no consumidor.

Dica de campo: sempre trate o contador de backout e projete uma estratégia para mensagens problemáticas. Não deixe o programa lutar eternamente contra o mesmo Klingon em um loop temporal.


Capítulo XXII — Passo a passo para o COBOL Padawan começar a estudar

Passo 1 — Domine os conceitos

Antes de instalar qualquer coisa, compreenda:

  • mensagem;

  • fila;

  • Queue Manager;

  • canal;

  • persistência;

  • commit;

  • rollback;

  • produtor;

  • consumidor;

  • cluster;

  • Publish/Subscribe.

Passo 2 — Desenhe um fluxo simples

PRODUTOR → FILA → CONSUMIDOR

Depois acrescente:

PRODUTOR → QM1 → CANAL → QM2 → CONSUMIDOR

Passo 3 — Conheça as chamadas MQI

Estude inicialmente:

MQCONN
MQOPEN
MQPUT
MQGET
MQCLOSE
MQDISC

Depois avance para:

MQBEGIN
MQCMIT
MQBACK
MQINQ
MQSET

Passo 4 — Aprenda MQSC

MQSC é a linguagem administrativa usada para definir e controlar objetos.

Exemplos conceituais:

DEFINE QLOCAL(FILA.TESTE)
DISPLAY QLOCAL(FILA.TESTE)
ALTER QLOCAL(FILA.TESTE)
DELETE QLOCAL(FILA.TESTE)

Passo 5 — Crie um laboratório produtor/consumidor

O produtor envia:

USS ENTERPRISE NCC-1701

O consumidor lê e exibe.

Esse será nosso primeiro Easter egg.

Depois envie:

RESISTANCE IS FUTILE

Caso a mensagem pare na Dead-Letter Queue, saberemos que os Borg assumiram o canal.

Passo 6 — Teste persistência

Envie uma mensagem persistente, interrompa o Queue Manager de forma controlada e confirme a recuperação após a reinicialização.

Passo 7 — Teste transação

Faça o consumidor:

  1. obter a mensagem;

  2. provocar um erro;

  3. executar rollback;

  4. verificar o retorno da mensagem.

Passo 8 — Estude segurança

Crie usuários com permissões distintas.

Teste quem pode:

  • conectar;

  • colocar;

  • retirar;

  • consultar;

  • administrar.

Passo 9 — Adicione um segundo Queue Manager

Configure uma rota entre dois ambientes.

Observe:

  • fila remota;

  • transmission queue;

  • sender channel;

  • receiver channel.

Passo 10 — Monitore

Acompanhe:

  • profundidade da fila;

  • mensagens antigas;

  • canais parados;

  • erros;

  • DLQ;

  • desempenho;

  • logs;

  • consumo;

  • tentativas de autenticação.


Capítulo XXIII — Dez dicas do engenheiro-chefe

1. Não use uma fila como banco de dados

Fila é mecanismo de transporte e desacoplamento, não repositório permanente de consulta histórica.

2. Defina contratos de mensagem

Documente:

  • formato;

  • campos;

  • versão;

  • codificação;

  • tamanho;

  • obrigatoriedade;

  • tratamento de erro.

3. Pense em idempotência

O consumidor deve, quando possível, tolerar o recebimento repetido de uma mensagem sem executar duas vezes um efeito indevido.

4. Use identificadores de correlação

Eles ajudam a relacionar uma resposta à solicitação original.

5. Monitore idade, não apenas quantidade

Uma fila com dez mensagens antigas pode ser mais grave que uma fila com mil mensagens processadas rapidamente.

6. Planeje mensagens inválidas

Toda arquitetura precisa responder:

O que faremos quando o conteúdo não puder ser processado?

7. Proteja os canais

Não exponha canais administrativos ou permissões excessivas.

8. Evite mensagens gigantes sem necessidade

Mensagens muito grandes aumentam consumo de rede, armazenamento, log e tempo de processamento.

9. Conheça a semântica da entrega

“Coloquei na fila” não significa necessariamente “o negócio foi concluído”.

Significa que a responsabilidade foi transferida para outra etapa.

10. Documente o caminho completo

Não basta saber o nome da fila.

Registre:

  • produtor;

  • consumidor;

  • Queue Manager;

  • canais;

  • regras de segurança;

  • formato;

  • retentativas;

  • DLQ;

  • backout;

  • alertas;

  • responsáveis.


Capítulo XXIV — MQ versus chamadas REST

REST e MQ não são inimigos.

REST funciona muito bem quando:

  • a resposta imediata é necessária;

  • o consumidor está disponível;

  • o fluxo é simples;

  • a interação é síncrona.

MQ funciona muito bem quando:

  • o consumidor pode estar indisponível;

  • a operação precisa ser armazenada;

  • há grande volume;

  • os sistemas possuem velocidades diferentes;

  • retentativa e recuperação são necessárias;

  • o processamento pode ser assíncrono.

Uma arquitetura real pode usar ambos:

Aplicativo
   |
   | REST
   v
API
   |
   | MQ
   v
COBOL/CICS

REST recebe a solicitação.

MQ protege e desacopla o processamento.

COBOL executa a regra crítica.

É uma aliança entre planetas, não uma guerra entre tecnologias.


Capítulo XXV — O maior ensinamento da linha do tempo

O IBM MQ atravessou:

  • cliente-servidor;

  • Internet;

  • Java;

  • SOA;

  • Web Services;

  • integração empresarial;

  • cloud;

  • containers;

  • Kubernetes;

  • OpenShift;

  • observabilidade;

  • segurança pós-quântica.

E, apesar de toda essa evolução, sua ideia central continua reconhecível:

Uma aplicação produz uma mensagem.
Outra aplicação consome.
O MQ garante a travessia.

Essa permanência ensina algo precioso ao Programador COBOL Padawan.

Uma tecnologia não permanece relevante porque recusa mudanças.

Ela permanece relevante porque preserva seus princípios fundamentais enquanto adapta sua implementação ao novo mundo.

O COBOL também sobreviveu seguindo lógica semelhante.

O z/OS também.

O Db2 também.

O CICS também.

Eles não ficaram congelados em uma fotografia de 1970. Evoluíram, ganharam APIs, segurança moderna, integração, automação e novos modelos operacionais.

O IBM MQ tornou-se uma ponte entre gerações.

De um lado:

COBOL
CICS
IMS
Db2
z/OS

Do outro:

Java
Python
REST
JSON
Containers
Kubernetes
Cloud
IA

No centro:

IBM MQ

Conclusão — A mensagem precisa chegar

No final de nossa missão, percebemos que IBM MQ não é apenas uma ferramenta para criar filas.

Ele é uma filosofia de arquitetura.

Uma filosofia baseada em:

  • desacoplamento;

  • resiliência;

  • segurança;

  • persistência;

  • transações;

  • integração;

  • confiabilidade.

Para o Programador COBOL iniciante, aprender MQ é descobrir como o mainframe conversa com o restante da galáxia digital.

Seu programa COBOL não precisa compreender cada detalhe de uma aplicação móvel, de um container ou de uma API em nuvem.

Ele precisa conhecer o contrato da mensagem.

Precisa saber onde recebê-la.

Precisa processá-la corretamente.

Precisa confirmar ou desfazer a transação.

O restante fica sob responsabilidade da infraestrutura de mensageria.

Talvez essa seja a verdadeira genialidade do MQ: permitir que sistemas de épocas, linguagens e plataformas diferentes cooperem sem exigir que todos se transformem na mesma coisa.

Na Frota Estelar, vulcanos, humanos, andorianos, klingons e inúmeras espécies trabalham lado a lado. Cada uma mantém sua identidade, mas utiliza protocolos comuns para colaborar.

No ambiente corporativo, COBOL, Java, Python, Linux, z/OS, containers e APIs fazem exatamente isso.

E o IBM MQ permanece no meio da ponte de comando, silencioso, transportando milhões de mensagens enquanto quase ninguém percebe.

Até o dia em que ele para.

Nesse instante, todos descobrem que o mensageiro discreto era, na verdade, um dos sistemas mais importantes da nave.

Vida longa e próspera às filas.

E lembre-se do código secreto escondido no log da missão:

MSGID: NCC1701
CORRELID: BELLACOSA
REASON: 00000000
STATUS: MESSAGE DELIVERED

A transmissão foi concluída. ☕🖖

segunda-feira, 29 de dezembro de 2025

💥 MQ NÃO É FILA — É O SEGURO DE VIDA DO SEU COBOL

 

Bellacosa Mainframe conheça MQ 

💥 MQ NÃO É FILA — É O SEGURO DE VIDA DO SEU COBOL

O guia definitivo de IBM MQ Fundamentals para quem vive no z/OS

Se você é um dev COBOL experiente, já sabe:
👉 o problema nunca foi o código…
👉 o problema sempre foi integração.

E é exatamente aí que entra o IBM MQ — o componente que transformou o mainframe de “ilha isolada” em coração da arquitetura moderna.


🕰️ ORIGEM — POR QUE O MQ EXISTE?

Antes do MQ:

  • Sistemas conversavam via sockets, arquivos, chamadas diretas
  • Tudo era síncrono
  • Se o destino caía → 💥 tudo quebrava

👉 A IBM criou o MQ (antigo WebSphere MQ) para resolver:

✔ Desacoplamento
✔ Confiabilidade
✔ Escalabilidade
✔ Integração heterogênea

💡 Tradução Bellacosa:

“MQ nasceu para impedir que um sistema derrube o outro.”


🧠 CONCEITO CENTRAL (O QUE MUDA TUDO)

👉 Aplicações não se falam diretamente

Elas falam com filas.


📦 MODELO MENTAL

COBOL A → MQ → COBOL B

✔ A envia
✔ MQ guarda
✔ B consome

👉 Simples… e revolucionário


💥 O TRIO QUE VOCÊ NUNCA ESQUECE

ConceitoPapel
MessageUnidade de dados
QueueArmazenamento
Queue ManagerCérebro

🧠 FRASE DE OURO

“Sem Queue Manager… não existe MQ.”


⚙️ COMO ISSO FUNCIONA (PASSO A PASSO REAL)

🔹 1. Aplicação COBOL envia mensagem

CALL 'MQPUT' USING ...

👉 Não importa:

  • Se o destino está online
  • Onde ele está
  • Qual linguagem usa

🔹 2. MQ armazena na fila

✔ Persistente (disco)
✔ Seguro
✔ Ordenado


🔹 3. Outra aplicação consome

CALL 'MQGET' USING ...

👉 Pode ser:

  • COBOL
  • Java
  • .NET
  • SAP

🔄 ASSÍNCRONO — O PODER REAL

👉 Diferente de CICS sync:

✔ Envia → continua
✔ Não bloqueia
✔ Alta performance

💡 Isso muda tudo em batch + online


💾 PERSISTENT vs NON-PERSISTENT

🔥 Persistent

✔ Gravado em disco
✔ Não perde
✔ Entrega garantida

👉 Use em:

  • Financeiro
  • Débito
  • Liquidação

⚡ Non-persistent

✔ Mais rápido
❌ Pode perder

👉 Use em:

  • Consulta
  • Logs
  • Eventos leves

🔄 UOW — TRANSAÇÃO DE VERDADE

👉 Unit of Work = grupo de mensagens

✔ Tudo ou nada

💡 Exemplo:

  • 4 mensagens
  • 1 falha

👉 MQ faz rollback de todas


💀 DLQ — DEAD LETTER QUEUE

👉 Quando dá ruim:

✔ Mensagem vai para DLQ
✔ Com motivo + código

💡 Easter egg de produção:

DLQ cheia = sistema gritando socorro


🔐 SEGURANÇA (NÍVEL ENTERPRISE)

🧠 OAM (Object Authority Manager)

✔ Controla acesso
✔ Quem pode PUT/GET


🔒 SSL / TLS

✔ Criptografia
✔ Autenticação


🔄 CONVERSÃO DE DADOS (A MÁGICA)

👉 COBOL (EBCDIC) ↔ Java (ASCII)

✔ MQ converte automaticamente

💡 Você nem vê acontecer


⚙️ CUSTOM CONVERSION

👉 Quer regra própria?

✔ Use exits

💡 Muito usado em legado


🧩 PADRÕES DE ARQUITETURA (OURO)


📦 Point-to-Point

✔ 1 → 1
✔ Request/Reply

👉 Clássico COBOL ↔ COBOL


💻 Client/Server

✔ Muitos → 1

👉 Centralização (ex: core bancário)


⚖️ Workload Sharing

✔ 1 fila → vários consumidores

👉 Paralelismo brutal

💡 Padrão:

Competing Consumers


📡 Publish/Subscribe

✔ 1 → muitos
✔ Desacoplado

👉 Base de Event-Driven Architecture


💣 PEGADINHAS QUE DERRUBAM SENIOR

❌ MQ é síncrono → ERRADO
❌ Aplicações se conectam direto → ERRADO
❌ Remote queue armazena mensagem → ERRADO
❌ MQ garante non-persistent → ERRADO


🧠 CENÁRIO REAL (BANCO)

👉 Fluxo típico:

  1. COBOL envia transação (MQPUT)
  2. MQ armazena (persistent)
  3. Workers processam (workload)
  4. Evento dispara (pub/sub)

💥 Tudo via MQ


🔥 CURIOSIDADES (EASTER EGGS)

  • MQ existe desde os anos 90 e ainda domina bancos
  • DLQ handler pode automatizar correções
  • MQ roda em:
    • z/OS
    • Linux
    • Windows
  • Pode transportar até 100MB por mensagem

💥 FRASES QUE DEFINEM MQ

“MQ desacopla no tempo, no espaço e na tecnologia.”

“Se caiu, MQ segura. Se voltou, MQ entrega.”

“COBOL não morreu… ele só ganhou MQ.”


🚀 CONCLUSÃO

Se você domina MQ:

✔ Seus sistemas não quebram fácil
✔ Integração deixa de ser dor
✔ Você pensa como arquiteto


💣 VERDADE FINAL

“MQ não é só middleware…
é o que separa sistemas frágeis de sistemas resilientes.”

 

quarta-feira, 26 de março de 2025

O Guia Definitivo para um Programador COBOL Padawan Entender Como os Grandes Bancos Distribuem Milhões de Mensagens sem que as Aplicações Precisem Saber Para Onde Estão Enviando

 

Bellacosa Mainframe e o ibm mq clustering sem misterios

☕ Um Café no Bellacosa Mainframe

IBM MQ Clustering sem Mistérios

O Guia Definitivo para um Programador COBOL Padawan Entender Como os Grandes Bancos Distribuem Milhões de Mensagens sem que as Aplicações Precisem Saber Para Onde Estão Enviando

Existe uma frase muito conhecida entre arquitetos de sistemas distribuídos:

"As melhores infraestruturas são aquelas que as aplicações nem percebem que existem."

Essa frase resume perfeitamente a filosofia do IBM MQ Clustering.

Quando um programador COBOL começa sua carreira no ambiente IBM Z, normalmente aprende primeiro sobre arquivos VSAM, Db2, CICS, JCL, IMS e, em algum momento, conhece o IBM MQ. Inicialmente, tudo parece simples: um programa faz um MQPUT, outro realiza um MQGET, e as mensagens seguem seu caminho. Porém, conforme a empresa cresce, surgem novas perguntas.

E se houver dezenas de Queue Managers?

E se um deles parar?

E se o volume de mensagens dobrar durante a Black Friday?

E se um datacenter inteiro ficar indisponível?

É exatamente para responder a essas perguntas que nasceu o IBM MQ Clustering, uma tecnologia extremamente sofisticada que, curiosamente, trabalha de forma quase invisível para quem desenvolve aplicações.

Hoje vamos abrir a caixa-preta dessa arquitetura e entender por que muitos dos conceitos considerados modernos na computação em nuvem já eram utilizados pelo IBM MQ muito antes de Kubernetes, Service Mesh ou API Gateways se tornarem populares.


A evolução natural dos grandes sistemas

Imagine um pequeno sistema bancário.

Existe apenas um Queue Manager.

COBOL
   │
 MQPUT
   │
 QM1
   │
 FILA

Tudo funciona perfeitamente.

Mas bancos nunca permanecem pequenos.

Novos produtos surgem.

PIX.

Cartões.

Investimentos.

Internet Banking.

Aplicativos móveis.

Open Finance.

Seguradoras.

Correspondentes bancários.

Agora centenas de aplicações precisam trocar mensagens.

Um único Queue Manager deixa de ser suficiente.


A primeira solução... e o primeiro problema

O caminho mais óbvio seria criar novos Queue Managers.

QM1
QM2
QM3
QM4
QM5

Até aqui parece simples.

O problema aparece quando cada aplicação precisa conhecer todos eles.

O código começa a ficar assim:

Se pagamento → QM2

Se cartão → QM3

Se empréstimo → QM4

Se PIX → QM5

Sempre que nasce um novo Queue Manager...

...centenas de aplicações precisam ser alteradas.

Isso é um pesadelo operacional.


A filosofia do IBM MQ

Os engenheiros da IBM fizeram uma pergunta brilhante.

"Por que obrigar a aplicação a conhecer toda a infraestrutura?"

E inverteram completamente o raciocínio.

Em vez da aplicação decidir para onde enviar...

...ela apenas entrega a mensagem ao Cluster.

Quem decide o destino é o próprio IBM MQ.

Esse desacoplamento é um dos pilares da engenharia de software moderna.


O Cluster não é um servidor

Aqui existe um dos maiores erros cometidos por iniciantes.

Muitos imaginam que um Cluster seja um computador enorme.

Não é.

O Cluster é apenas um grupo lógico de Queue Managers.

Imagine um banco presente em vários estados brasileiros.

São Paulo

QM1

------------

Rio

QM2

------------

Brasília

QM3

------------

Curitiba

QM4

Todos fazem parte do mesmo Cluster.

Podem executar:

  • Linux

  • AIX

  • IBM Z

  • Windows

  • Containers

Nada impede essa convivência.


O segredo está no conhecimento compartilhado

Cada Queue Manager continua sendo totalmente independente.

Ele possui:

  • logs próprios

  • recovery próprio

  • filas próprias

  • canais próprios

  • transações próprias

O Cluster não une fisicamente esses componentes.

Ele compartilha conhecimento.

É uma enorme diferença.


Os bibliotecários do Cluster

Imagine uma biblioteca nacional.

Existem milhares de livros.

Alguém precisa saber onde cada livro está.

No IBM MQ esse papel pertence aos Repositories.

São eles que mantêm o catálogo do Cluster.


Full Repository

O Full Repository conhece absolutamente tudo.

Ele sabe:

  • todos os Queue Managers

  • todas as filas de Cluster

  • todos os canais

  • atributos

  • prioridades

  • disponibilidade

É como um catálogo central.

Quando um novo Queue Manager entra no Cluster, ele registra suas informações no Full Repository.


Por que dois Full Repositories?

Essa pergunta aparece frequentemente em entrevistas técnicas.

A resposta é simples.

Nunca devemos criar um ponto único de falha.

Imagine um único catálogo.

Se ele desaparecer...

ninguém consegue registrar novos membros.

Por isso sempre existem pelo menos dois.

FR1

⇄

FR2

Os dois mantêm sincronização contínua.

Se um falhar...

o outro continua funcionando.

Essa redundância é um princípio clássico do IBM Z.


Partial Repository

Agora chegamos a uma das partes mais elegantes da arquitetura.

O Partial Repository não tenta conhecer o mundo inteiro.

Ele aprende apenas aquilo que realmente utiliza.

Imagine um funcionário do banco especializado apenas em financiamentos.

Ele não precisa decorar todas as regras de previdência privada.

Da mesma forma, um Partial Repository armazena somente as informações necessárias para executar seu trabalho.

Isso reduz consumo de memória, processamento e tráfego de rede.


Aprendizado sob demanda

Quando um Queue Manager precisa enviar uma mensagem para uma fila desconhecida, ele consulta um Full Repository.

O diálogo interno acontece mais ou menos assim.

PR

↓

"Quem possui esta fila?"

↓

FR

↓

"QM7"

↓

PR

↓

"Obrigado. Vou guardar essa informação."

Na próxima mensagem, ele já sabe o caminho.

É praticamente um cache inteligente.


O caminho percorrido pela mensagem

Para um programador COBOL, esse processo é fascinante porque praticamente nada muda no código.

A aplicação executa:

CALL 'MQPUT'

Ou utiliza a API correspondente.

A partir daí, começa uma sequência de decisões invisíveis.

Primeiro, o Queue Manager recebe a mensagem.

Depois verifica se a fila pertence ao Cluster.

Caso pertença, consulta suas informações locais.

Se necessário, conversa com um Full Repository.

Obtém todas as possíveis rotas.

Avalia disponibilidade.

Analisa balanceamento.

Seleciona o melhor destino.

Encaminha a mensagem.

A aplicação nunca participa dessas decisões.


O verdadeiro balanceamento de carga

Muitos acreditam que o IBM MQ distribui mensagens aleatoriamente.

Na realidade, ele considera diversos fatores.

Entre eles:

  • disponibilidade do Queue Manager

  • estado dos canais

  • pesos configurados

  • prioridade

  • ranking

  • afinidade

  • Cluster Workload Balancing

  • Cluster Workload Exit

Imagine três servidores.

QM2

QM3

QM4

Todos hospedam a mesma fila.

As mensagens podem ser distribuídas assim:

1 → QM2

2 → QM3

3 → QM4

4 → QM2

5 → QM3

6 → QM4

Nenhuma linha de código COBOL precisou ser alterada.


Alta Disponibilidade de verdade

Agora imagine que QM3 pare inesperadamente.

Em muitas arquiteturas antigas, seria necessário alterar configurações, reiniciar aplicações ou até modificar parâmetros em produção.

No IBM MQ Cluster, isso normalmente não acontece.

O middleware identifica que aquele Queue Manager está indisponível.

Automaticamente passa a enviar novas mensagens para os demais integrantes do Cluster.

Esse comportamento aumenta drasticamente a disponibilidade dos serviços.


O que acontece com mensagens persistentes?

Aqui entra um dos grandes diferenciais do IBM MQ.

Quando uma mensagem é persistente, ela é protegida pelos mecanismos de logging e recuperação do Queue Manager.

Caso ocorra uma falha durante a transmissão, entram em ação:

  • logs

  • commits

  • rollbacks

  • syncpoints

  • retries automáticos

É justamente essa confiabilidade que faz o IBM MQ continuar sendo um dos principais middlewares utilizados pelos maiores bancos do mundo.


Os canais continuam existindo

Outro mito bastante comum.

Cluster não elimina canais.

Ele apenas simplifica sua administração.

Sem Cluster, normalmente seria necessário criar inúmeros canais ponto a ponto.

QM1 → QM2

QM1 → QM3

QM1 → QM4

QM2 → QM5

Quanto mais Queue Managers...

mais canais.

No Cluster surgem conceitos como:

  • Cluster Sender

  • Cluster Receiver

A administração fica muito mais simples.


Escalabilidade praticamente transparente

Imagine uma Black Friday.

O processamento dobra.

Depois triplica.

O Queue Manager começa a atingir limites.

Sem Cluster seria necessário reconfigurar aplicações.

Com Cluster basta adicionar novos Queue Managers.

Eles passam a receber parte das mensagens automaticamente.

Essa expansão horizontal é um dos grandes motivos pelos quais o IBM MQ continua extremamente atual.


MQ Cluster não significa replicação

Esse ponto merece atenção.

O Cluster não replica automaticamente mensagens.

Também não compartilha filas.

Nem transforma vários Queue Managers em um único.

Cada Queue Manager continua responsável pelas próprias filas.

O Cluster apenas decide para qual deles cada mensagem deve ser enviada.


Comparando com tecnologias modernas

É impossível não perceber algumas semelhanças.

Hoje ouvimos falar diariamente em:

  • Kubernetes

  • Service Discovery

  • Service Mesh

  • API Gateway

  • Load Balancer

Todos trabalham com uma ideia semelhante.

As aplicações deixam de conhecer a infraestrutura física.

Existe uma camada intermediária responsável por encontrar o melhor destino.

O IBM MQ fazia exatamente isso quando muitos desses conceitos ainda nem existiam.


Onde o COBOL entra nessa história?

Aqui está uma das maiores lições para um Programador COBOL Padawan.

Você não precisa conhecer toda a infraestrutura para desenvolver uma boa aplicação.

Seu programa deve preocupar-se apenas com a lógica de negócio.

Quem decide:

  • onde executar

  • qual servidor utilizar

  • qual Queue Manager está disponível

  • qual caminho seguir

é o middleware.

Essa separação de responsabilidades é um dos maiores exemplos de arquitetura corporativa.


Curiosidades que poucos conhecem

Alguns fatos interessantes sobre MQ Clustering.

Curiosidade 1

O Cluster foi criado para reduzir drasticamente o custo administrativo em grandes ambientes com dezenas ou centenas de Queue Managers.


Curiosidade 2

Os Full Repositories normalmente não processam mensagens das aplicações.

Sua principal função é manter e distribuir metadados do Cluster.


Curiosidade 3

Partial Repositories aprendem dinamicamente novas rotas conforme a necessidade.

Isso reduz tráfego desnecessário.


Curiosidade 4

É possível possuir centenas de Queue Managers dentro de um único Cluster.


Curiosidade 5

Muitas instituições financeiras utilizam MQ Clustering em conjunto com tecnologias como IBM MQ Uniform Clusters, Multi-Instance Queue Managers, RDQM (em plataformas distribuídas), IBM z/OS Sysplex, CICS e IMS, criando arquiteturas extremamente resilientes.


Erros clássicos em entrevistas

Se você pretende trabalhar com middleware ou IBM MQ, evite responder estas afirmações.

❌ "Cluster compartilha filas."

Não compartilha.


❌ "Cluster replica mensagens."

Não necessariamente.


❌ "Full Repository recebe todas as mensagens."

Ele mantém metadados.


❌ "Partial Repository conhece todo o Cluster."

Conhece apenas o necessário.


❌ "Cluster elimina canais."

Não elimina.

Ele simplifica sua administração.


Easter Egg Bellacosa Mainframe

Existe uma analogia interessante para quem veio do mundo IBM Z.

Pense no VTAM.

Uma aplicação CICS normalmente não precisa conhecer todos os detalhes da infraestrutura física de rede.

Ela conversa com uma camada responsável por localizar recursos.

O MQ Cluster segue uma filosofia parecida.

As aplicações enxergam um ambiente lógico.

Quem conhece os detalhes físicos é o middleware.

Essa abstração é uma característica recorrente das tecnologias IBM: esconder a complexidade operacional para que o desenvolvedor possa concentrar seus esforços na regra de negócio.


A maior lição para um Programador COBOL Padawan

Quando começamos a programar, acreditamos que escrever código é a parte mais importante do trabalho.

Com o tempo percebemos que sistemas corporativos são muito maiores do que programas COBOL.

Eles são compostos por camadas especializadas que cooperam entre si: CICS gerencia transações, Db2 administra dados, RACF controla segurança, JES organiza o processamento batch e o IBM MQ coordena a comunicação entre aplicações.

O MQ Clustering representa um dos melhores exemplos dessa filosofia. Ele permite que aplicações continuem simples enquanto o middleware assume responsabilidades complexas como descoberta de serviços, balanceamento de carga, alta disponibilidade e roteamento inteligente.

Essa separação de responsabilidades explica por que os maiores bancos do mundo conseguem processar milhões de mensagens por hora com estabilidade. O desenvolvedor escreve um único MQPUT; o IBM MQ decide o restante.

E talvez essa seja a maior lição desta conversa: engenharia de software de alto nível não consiste em fazer cada componente saber tudo. Consiste em fazer cada componente saber apenas o necessário e confiar que a arquitetura fará o restante.

No universo IBM Z, essa ideia existe há décadas. Hoje ela recebe novos nomes na computação em nuvem, mas seu princípio continua exatamente o mesmo: desacoplamento, resiliência e inteligência distribuída. É por isso que estudar IBM MQ Clustering não é apenas aprender um produto — é compreender um dos fundamentos da arquitetura de sistemas corporativos modernos.


sábado, 21 de setembro de 2024

A História da Integração Corporativa sem Mistérios

Bellacosa Mainframe e a historia da integracao corporativa sem misterios

 

☕ Um Café no Bellacosa Mainframe

A História da Integração Corporativa sem Mistérios

Do arquivo sequencial ao IBM App Connect Enterprise: o guia definitivo para o programador COBOL Padawan entender como os sistemas aprenderam a conversar

“A tecnologia muda, os protocolos ganham novos nomes, mas a missão permanece: conectar, transformar e entregar valor.”

Imagine a seguinte cena.

Você está sentado diante de uma tela verde, analisando um programa COBOL que lê um arquivo sequencial, consulta uma tabela Db2 e grava registros em um dataset de saída. Até aí, tudo parece familiar.

Então alguém da arquitetura chega e diz:

— Precisamos publicar esses dados em uma API, enviar eventos para o Kafka, integrar com o Salesforce, consumir um serviço REST e encaminhar mensagens para uma aplicação que está rodando no OpenShift.

O programador COBOL Padawan olha para o terminal, respira fundo e pensa:

— Em que momento meu arquivo FB de 80 posições virou parte de uma arquitetura intergaláctica?

Calma, jovem aprendiz.

Apesar dos nomes modernos, dos diagramas coloridos e das apresentações carregadas de expressões como cloud-native, event-driven, API-led e composable integration, o problema central continua sendo o mesmo enfrentado pelos profissionais de tecnologia há décadas:

como fazer sistemas diferentes trocarem informações com segurança, confiabilidade e significado?

Esta é a história da integração corporativa.

Uma história que começou com arquivos, passou por conexões ponto a ponto, middleware, barramentos de serviço, SOA, APIs, nuvem, eventos e inteligência artificial.

E, ao contrário do que alguns imaginam, o mainframe não ficou assistindo a essa evolução de longe. Ele participou de praticamente todas as fases.

Prepare sua caneca, ajuste o brilho do terminal 3270 e venha conhecer a longa jornada que transformou arquivos em APIs, transações em eventos e sistemas isolados em ecossistemas digitais.


1. O que é integração corporativa?

Integração corporativa é o conjunto de técnicas, padrões, programas e plataformas utilizados para permitir que diferentes sistemas compartilhem dados e coordenem processos.

Esses sistemas podem estar:

  • no mesmo computador;

  • em servidores diferentes;

  • em sistemas operacionais diferentes;

  • em empresas diferentes;

  • em nuvens diferentes;

  • em tecnologias criadas com décadas de distância.

Imagine um banco.

O banco pode possuir:

  • um sistema de contas correntes em COBOL e CICS;

  • um sistema de cartões em Java;

  • um aplicativo móvel;

  • um sistema antifraude;

  • um CRM;

  • uma plataforma de investimentos;

  • um ambiente de análise de dados;

  • serviços de Pix;

  • aplicações em nuvem;

  • parceiros externos.

Nenhum desses sistemas vive completamente sozinho.

Quando um cliente altera seu endereço, essa mudança pode precisar chegar ao sistema de contas, cartões, seguros, investimentos, correspondência, prevenção a fraudes e atendimento.

Integração é justamente o mecanismo que permite que essa informação viaje entre os sistemas.

Podemos resumir a missão em quatro verbos:

conectar, transformar, transportar e controlar.

Conectar significa permitir a comunicação.

Transformar significa converter dados entre formatos.

Transportar significa entregar a informação ao destino.

Controlar significa garantir segurança, monitoramento, rastreabilidade e tratamento de erros.


2. A integração existia antes das APIs

Hoje é comum alguém associar integração diretamente a APIs REST.

Mas a integração corporativa nasceu muito antes da Web.

Ela já existia quando os dados eram transportados em:

  • cartões perfurados;

  • fitas magnéticas;

  • discos;

  • arquivos sequenciais;

  • relatórios impressos;

  • terminais;

  • redes proprietárias.

Um programa COBOL que gera um arquivo para outro programa consumir já está realizando integração.

Um job que extrai registros do Db2 e os envia por FTP também é integração.

Uma transação CICS que coloca uma mensagem em uma fila IBM MQ é integração.

Uma aplicação que publica um evento em Kafka é integração.

Uma API que recebe JSON e chama uma transação IMS é integração.

A tecnologia muda, mas o princípio permanece.


3. Primeira era: batch e arquivos

A integração por arquivos

Durante as décadas de 1970 e 1980, grande parte da troca de dados corporativos era realizada por arquivos.

O fluxo era simples:

Sistema de origem
       |
       v
Gera arquivo
       |
       v
Transporte ou disponibilização
       |
       v
Sistema de destino lê o arquivo

No mainframe, isso poderia ser implementado com:

  • COBOL;

  • JCL;

  • QSAM;

  • VSAM;

  • GDG;

  • SORT;

  • IDCAMS;

  • FTP;

  • fitas magnéticas.

Um sistema de folha de pagamento, por exemplo, poderia gerar um arquivo contendo os créditos dos funcionários.

O sistema bancário receberia esse arquivo, validaria os registros e efetuaria os depósitos.

Um layout hipotético poderia ser:

01 REGISTRO-PAGAMENTO.
   05 NUMERO-CONTA       PIC 9(10).
   05 VALOR-PAGAMENTO    PIC 9(11)V99.
   05 DATA-PAGAMENTO     PIC 9(08).
   05 CODIGO-EMPRESA     PIC X(10).

Cada linha do arquivo representaria uma instrução de pagamento.

Esse modelo ainda é amplamente utilizado, especialmente em processos de grande volume.


Por que o batch funcionava tão bem?

O batch possui vantagens importantes.

Ele permite processar milhões de registros de forma previsível.

Ele é eficiente para operações que não precisam acontecer imediatamente.

Também oferece boa capacidade de reinício, auditoria e controle.

Imagine o fechamento diário de um banco.

Não é necessário atualizar todos os relatórios financeiros a cada milissegundo. Muitas tarefas podem ser agrupadas e processadas em uma janela noturna.

O batch é perfeito para isso.


O problema da latência

A principal limitação da integração por arquivos é o tempo.

Considere esta sequência:

22:00 - Sistema A gera arquivo
23:00 - Arquivo é transferido
00:00 - Sistema B inicia processamento
01:30 - Sistema C recebe o resultado

A informação pode levar horas para percorrer toda a cadeia.

Se o arquivo estiver incorreto, atrasado ou incompleto, dezenas de jobs posteriores podem falhar.

No mainframe, isso cria uma verdadeira constelação de dependências no JES2.

Um job espera o outro.

O segundo espera o terceiro.

O terceiro depende de um GDG.

O quarto aguarda o arquivo chegar.

Quando algo falha, o operador vê a fila crescer como uma frota inimiga aproximando-se da estação espacial.


Curiosidade do mainframe

Muitas empresas modernas ainda dependem fortemente de integração por arquivos.

O formato pode ter mudado de fita para SFTP, de arquivo fixo para CSV ou de dataset para objeto em nuvem, mas a ideia continua igual:

um sistema produz um pacote de dados e outro sistema o consome posteriormente.

Não devemos tratar batch como tecnologia ultrapassada.

Ele é apenas um modelo diferente de integração.

O erro acontece quando tentamos utilizar batch em situações que exigem resposta imediata.


4. Segunda era: integração ponto a ponto

Com a expansão dos computadores distribuídos nas décadas de 1980 e 1990, as empresas começaram a adotar diferentes plataformas.

Agora havia:

  • mainframes;

  • servidores Unix;

  • AS/400;

  • computadores Windows;

  • bancos Oracle;

  • aplicações SAP;

  • sistemas departamentais;

  • clientes e servidores.

Cada sistema precisava se conectar diretamente a outros sistemas.

Nascia a integração ponto a ponto.

Sistema A ------ Sistema B
    |                |
    |                |
Sistema C ------ Sistema D

No início, parecia uma solução simples.

Se o sistema de vendas precisava enviar informações ao estoque, criava-se uma interface.

Se o estoque precisava falar com o financeiro, criava-se outra.

Se o financeiro precisava comunicar-se com o mainframe, surgia mais uma conexão.

O problema aparecia com o crescimento.


O espaguete de interfaces

Considere quatro sistemas:

  • A;

  • B;

  • C;

  • D.

Se todos precisarem se conectar entre si, teremos diversas interfaces.

Com dez sistemas, o número potencial de conexões cresce dramaticamente.

A quantidade máxima de conexões diretas entre n sistemas pode ser calculada por:

n × (n - 1)
------------
     2

Para 10 sistemas:

10 × 9 / 2 = 45 conexões

Para 20 sistemas:

20 × 19 / 2 = 190 conexões

Para 100 sistemas:

100 × 99 / 2 = 4.950 conexões

Agora imagine manter 4.950 interfaces.

Cada uma possui:

  • formato próprio;

  • protocolo próprio;

  • lógica própria;

  • segurança própria;

  • tratamento de erros próprio;

  • documentação própria — quando existe documentação.

Esse cenário ficou conhecido como spaghetti integration.

Era uma arquitetura que parecia um prato de macarrão: fios cruzando em todas as direções.


O impacto no programador COBOL

O programador COBOL poderia receber pedidos como:

  • gerar um arquivo para o sistema Unix;

  • criar uma chamada CICS para uma aplicação externa;

  • acessar uma fila MQ;

  • receber dados via socket;

  • adaptar um copybook para um novo consumidor;

  • criar uma rotina específica para cada parceiro.

Com o tempo, o mesmo programa acumulava diversas condições:

EVALUATE CODIGO-CANAL
   WHEN 'WEB'
      PERFORM TRATA-WEB
   WHEN 'ATM'
      PERFORM TRATA-ATM
   WHEN 'MOBILE'
      PERFORM TRATA-MOBILE
   WHEN 'PARCEIRO-A'
      PERFORM TRATA-PARCEIRO-A
   WHEN 'PARCEIRO-B'
      PERFORM TRATA-PARCEIRO-B
END-EVALUATE

A aplicação de negócio começava a conhecer detalhes de todos os consumidores.

Isso criava forte acoplamento.

Uma mudança em um canal poderia exigir alteração no sistema central.


5. Terceira era: o surgimento do middleware

Para resolver o caos ponto a ponto, surgiu o middleware.

Middleware pode ser entendido como uma camada intermediária entre sistemas.

Em vez de cada aplicação conhecer todas as demais, elas passam a utilizar uma infraestrutura comum.

Aplicação A
     |
     v
Middleware
     |
     v
Aplicação B

O middleware pode executar várias funções:

  • transporte de mensagens;

  • transformação de formatos;

  • roteamento;

  • segurança;

  • controle transacional;

  • registro de eventos;

  • monitoramento;

  • tratamento de falhas.

Uma analogia simples é o sistema postal.

O remetente não precisa conhecer todo o caminho da entrega.

Ele coloca o endereço no envelope e entrega a correspondência ao serviço postal.

O middleware cuida do transporte.


6. Mensageria e IBM MQ

Uma das formas mais importantes de middleware é a mensageria.

No modelo de mensageria, a aplicação de origem não precisa conversar diretamente com o destino.

Ela coloca uma mensagem em uma fila.

Programa COBOL
      |
      v
   Fila MQ
      |
      v
Aplicação consumidora

A fila funciona como um intermediário confiável.

O produtor envia a mensagem.

O consumidor lê quando estiver disponível.

Essa separação gera desacoplamento.


Exemplo prático

Uma transação CICS recebe uma solicitação de pagamento.

Em vez de chamar diretamente o sistema antifraude, ela publica uma mensagem:

PAGAMENTO
CONTA=123456
VALOR=850.00
CANAL=MOBILE

O sistema antifraude consome a mensagem e realiza sua análise.

Se o antifraude estiver temporariamente indisponível, a mensagem pode permanecer na fila.

Isso é muito mais resiliente do que uma conexão direta que falha imediatamente.


Uma lição importante

IBM MQ não é apenas um “correio eletrônico para programas”.

Ele oferece recursos corporativos como:

  • entrega garantida;

  • persistência;

  • unidades de trabalho;

  • controle de filas;

  • segurança;

  • recuperação;

  • integração entre diferentes plataformas.

Para um programador COBOL, compreender MQ abre uma enorme porta para a integração moderna.

O programa pode:

  1. conectar-se a um queue manager;

  2. abrir uma fila;

  3. colocar ou obter uma mensagem;

  4. confirmar ou desfazer a transação;

  5. fechar os recursos.

Em termos conceituais:

MQCONN
MQOPEN
MQPUT ou MQGET
MQCMIT
MQCLOSE
MQDISC

Cada chamada deve ter seu código de retorno verificado.

Ignorar COMPCODE e REASON em MQ é equivalente a pilotar uma nave sem consultar os sensores.

Pode funcionar durante algum tempo, mas o asteroide chegará.


7. O Enterprise Service Bus

Com o amadurecimento do middleware surgiu o conceito de Enterprise Service Bus, ou ESB.

O ESB atua como um barramento central de integração.

           CRM
            |
SAP -----> ESB <----- Mainframe
            |
         Aplicativo
            |
          Parceiro

Todos os sistemas integram-se por meio do barramento.

O ESB pode receber uma mensagem, transformá-la e encaminhá-la ao destino correto.


O que o ESB faz?

Suponha que um sistema envie XML:

<cliente>
    <codigo>123</codigo>
    <nome>Leonard McCoy</nome>
</cliente>

Mas o destino espera JSON:

{
  "customerId": 123,
  "customerName": "Leonard McCoy"
}

O ESB pode realizar essa transformação.

Ele também pode decidir a rota:

Se país = BRASIL
    enviar ao sistema nacional
Se país = ARGENTINA
    enviar ao sistema regional
Caso contrário
    enviar ao processamento internacional

Além disso, pode enriquecer a mensagem.

Por exemplo:

  1. recebe o número do cliente;

  2. consulta o Db2;

  3. obtém a categoria;

  4. acrescenta a categoria à mensagem;

  5. encaminha o conteúdo ao destino.


8. A evolução dos produtos IBM de integração

A história dos produtos IBM de integração possui várias mudanças de nome e evolução tecnológica.

Entre os nomes que marcaram essa trajetória estão:

  • MQSeries Integrator;

  • WebSphere Message Broker;

  • IBM Integration Bus;

  • IBM App Connect Enterprise.

Esses nomes não representam simplesmente mudanças cosméticas.

Eles refletem a ampliação das capacidades da plataforma.

O produto deixou de ser apenas uma ferramenta de integração baseada em mensagens e evoluiu para uma plataforma capaz de trabalhar com:

  • IBM MQ;

  • arquivos;

  • bancos de dados;

  • XML;

  • JSON;

  • SOAP;

  • REST;

  • aplicações empresariais;

  • eventos;

  • ambientes em nuvem;

  • containers.

O IBM App Connect Enterprise, conhecido como ACE, é herdeiro direto dessa longa evolução.


9. Como funciona um fluxo de integração no ACE?

Um fluxo de integração pode ser visualizado como uma sequência de etapas.

Entrada
  |
Validação
  |
Transformação
  |
Roteamento
  |
Acesso a sistemas
  |
Saída

Imagine uma API que recebe um pedido.

O fluxo pode realizar:

  1. receber o JSON;

  2. validar os campos obrigatórios;

  3. converter o formato;

  4. consultar o cadastro do cliente;

  5. enviar uma mensagem para MQ;

  6. registrar a transação;

  7. responder ao solicitante.

Exemplo de entrada:

{
  "customerId": 1001,
  "productId": 502,
  "quantity": 3
}

O ACE pode transformar isso em uma estrutura utilizada por um programa COBOL:

000000100100000050200003

Naturalmente, uma aplicação real usaria um layout formal, provavelmente definido por copybook.

O ponto importante é que o sistema COBOL não precisa entender JSON.

O ACE pode realizar a tradução entre o mundo web e o formato tradicional do mainframe.

Esse é um dos maiores valores da integração: preservar o sistema central sem obrigá-lo a conhecer todas as tecnologias externas.


10. Quarta era: SOA e serviços

Na década de 2000, ganhou força a Arquitetura Orientada a Serviços, conhecida como SOA.

A ideia principal era organizar capacidades de negócio como serviços reutilizáveis.

Em vez de cada sistema acessar diretamente tabelas ou arquivos de outro sistema, ele chamaria um serviço.

Exemplos:

ConsultarCliente
CalcularLimite
RegistrarPagamento
EmitirApólice
CriarPedido

Um serviço não deveria representar apenas uma função técnica.

Ele deveria representar uma capacidade significativa do negócio.


Por que isso foi importante?

Imagine três aplicações que precisam consultar dados de clientes.

Sem um serviço, cada uma pode desenvolver sua própria lógica de acesso.

Uma consulta diretamente o Db2.

Outra lê um arquivo.

A terceira replica uma tabela.

Com o serviço ConsultarCliente, todas utilizam a mesma capacidade.

Isso reduz duplicação e aumenta a consistência.


11. SOAP, XML e WSDL

SOA foi fortemente associada a Web Services SOAP.

SOAP utiliza mensagens estruturadas, geralmente em XML.

Uma solicitação simplificada poderia ser:

<soapenv:Envelope>
   <soapenv:Body>
      <ConsultarCliente>
         <Codigo>123</Codigo>
      </ConsultarCliente>
   </soapenv:Body>
</soapenv:Envelope>

O serviço era descrito por um WSDL.

O WSDL funcionava como um contrato formal, informando:

  • operações disponíveis;

  • estruturas de entrada;

  • estruturas de saída;

  • tipos de dados;

  • endereços;

  • protocolos.

Para grandes empresas, isso era valioso porque contratos rígidos ajudam a controlar integrações complexas.


SOAP era ruim?

Não.

SOAP tornou-se alvo de críticas por sua verbosidade e complexidade, mas resolveu problemas importantes.

Ele oferece padrões robustos para:

  • contratos;

  • segurança;

  • confiabilidade;

  • transações;

  • interoperabilidade.

Muitos serviços corporativos ainda utilizam SOAP porque foram construídos para processos críticos e continuam atendendo bem às necessidades do negócio.

O erro é confundir “mais antigo” com “inútil”.

No mainframe aprendemos cedo que idade e irrelevância não são sinônimos.


12. Quinta era: APIs REST

Com o crescimento da Web, dos aplicativos móveis e das arquiteturas distribuídas, as APIs REST tornaram-se populares.

REST geralmente utiliza:

  • HTTP;

  • URLs;

  • métodos como GET, POST, PUT e DELETE;

  • JSON.

Exemplo:

GET /clientes/123

Resposta:

{
  "id": 123,
  "nome": "Hikaru Sulu",
  "categoria": "GOLD"
}

Comparado ao SOAP, REST costuma ser mais simples para aplicações web e móveis.


Métodos HTTP

Os métodos mais conhecidos são:

GET     Consultar
POST    Criar ou executar uma ação
PUT     Atualizar ou substituir
PATCH   Atualizar parcialmente
DELETE  Excluir

Porém, esses significados dependem do desenho da API.

Uma boa API não é apenas um conjunto de URLs.

Ela precisa possuir:

  • contrato claro;

  • autenticação;

  • autorização;

  • validação;

  • versionamento;

  • limites de consumo;

  • observabilidade;

  • tratamento de erros.


13. O programador COBOL e as APIs

Um programa COBOL não precisa ser substituído apenas porque a empresa deseja oferecer uma API.

A integração pode funcionar assim:

Aplicativo móvel
       |
       v
API Gateway
       |
       v
ACE ou z/OS Connect
       |
       v
CICS / IMS / Db2 / COBOL

A API recebe JSON.

A camada de integração converte a solicitação.

O programa COBOL executa a regra de negócio.

A resposta é transformada novamente em JSON.

Essa arquitetura permite preservar décadas de regras validadas enquanto se oferece uma interface moderna.


Dica importante

Não coloque regras de negócio importantes em todos os lugares.

Se a regra de cálculo de limite pertence ao sistema central, evite replicá-la no aplicativo, no ESB, na API e em um microsserviço.

A duplicação de regras produz divergência.

Depois de alguns meses, cada sistema calcula um resultado diferente.

A integração deve orquestrar e transformar, mas não deve tornar-se um depósito descontrolado de lógica.


14. API-led connectivity

Com o crescimento das APIs, surgiu o conceito de integração orientada por APIs.

Uma organização pode estruturar suas APIs em camadas.

APIs de sistema

Expõem sistemas internos.

Exemplo:

API do Db2
API do CICS
API do SAP

APIs de processo

Combinam várias fontes para executar uma função de negócio.

Exemplo:

API de análise de crédito

Essa API pode consultar cadastro, histórico, renda e risco.

APIs de experiência

São adaptadas a um canal.

Exemplo:

API para aplicativo móvel
API para portal
API para parceiros

Essa separação evita que cada canal acesse diretamente os sistemas centrais.


15. Sexta era: nuvem e integração híbrida

A maioria das grandes empresas não migrou tudo para uma única nuvem.

O cenário real costuma ser híbrido.

Há sistemas:

  • no mainframe;

  • em datacenters;

  • em nuvens públicas;

  • em SaaS;

  • em ambientes de parceiros;

  • em containers.

A integração híbrida conecta esses mundos.

IBM Z
  |
ACE
  |
OpenShift
  |
Cloud
  |
SaaS

O desafio não é apenas transportar dados.

Também é necessário lidar com:

  • redes;

  • identidade;

  • criptografia;

  • latência;

  • governança;

  • custos;

  • residência de dados;

  • disponibilidade.


16. Containers e OpenShift

As plataformas de integração passaram a ser executadas em containers.

Um container empacota a aplicação e suas dependências.

Kubernetes e OpenShift administram esses containers.

Isso permite:

  • implantação automatizada;

  • escalabilidade;

  • recuperação;

  • isolamento;

  • atualização controlada;

  • integração com pipelines de CI/CD.

O ACE pode participar desse modelo moderno.

Em vez de uma única instalação central contendo todos os fluxos da empresa, diferentes integrações podem ser empacotadas e implantadas conforme sua necessidade.

Porém, não confunda distribuição com ausência de controle.

Mil integrações em containers sem governança podem criar um novo espaguete — agora servido em pequenas tigelas de Kubernetes.

Esse é um dos easter eggs arquitetônicos da história: toda solução criada para eliminar complexidade pode produzir uma complexidade nova quando utilizada sem disciplina.


17. Sétima era: arquitetura orientada a eventos

Em sistemas tradicionais, uma aplicação pergunta repetidamente:

Existe pedido novo?
Existe pedido novo?
Existe pedido novo?

Isso é chamado de polling.

Na arquitetura orientada a eventos, o sistema publica um aviso quando algo acontece.

PedidoCriado
PagamentoAprovado
ClienteAtualizado
EstoqueReduzido

Os consumidores escutam os eventos relevantes.

                +--> Estoque
PedidoCriado ---+--> Financeiro
                +--> Logística
                +--> Analytics

O produtor não precisa conhecer todos os consumidores.

Esse desacoplamento é poderoso.


18. Eventos, mensagens e comandos

Esses conceitos parecem semelhantes, mas não são idênticos.

Comando

Solicita que algo seja feito.

EfetuePagamento

Evento

Informa que algo aconteceu.

PagamentoEfetuado

Mensagem

É o envelope transportado pelo sistema de mensageria. Pode conter um comando, um evento ou outro tipo de informação.

Essa distinção ajuda no desenho de integrações.

Um evento geralmente é descrito no passado porque representa um fato ocorrido.


19. Kafka e IBM Event Streams

Kafka popularizou plataformas distribuídas de eventos.

Os eventos são organizados em tópicos.

Exemplo:

TOPIC: pagamentos-aprovados

Vários consumidores podem ler o mesmo fluxo.

Um consumidor atualiza o sistema contábil.

Outro alimenta uma plataforma analítica.

Outro detecta fraude.

Outro dispara uma notificação.

No ecossistema IBM, o Event Streams oferece capacidades baseadas em Kafka.

O ACE pode produzir e consumir eventos, atuando como uma ponte entre aplicações tradicionais e arquiteturas orientadas a eventos.


20. MQ versus Kafka

Essa comparação aparece frequentemente.

Mas não é correto pensar apenas em “qual é melhor?”.

A pergunta adequada é:

qual modelo atende melhor ao problema?

IBM MQ é excelente para mensageria corporativa confiável, filas de trabalho e processamento transacional.

Kafka é muito forte em fluxos de eventos, retenção de registros e consumo por múltiplas aplicações.

Em várias arquiteturas, ambos convivem.

Exemplo:

CICS
 |
MQ
 |
ACE
 |
Kafka
 |
Analytics e aplicações digitais

O MQ garante a integração transacional com o sistema central.

O Kafka distribui o evento para vários consumidores.

Não é uma guerra entre tecnologias.

É uma composição de capacidades.

Como diria o Sr. Spock:

“Insistir que uma única ferramenta resolve todos os problemas é uma conclusão pouco lógica.”


21. A era da integração componível

Integração componível significa construir soluções a partir de blocos reutilizáveis.

Em vez de criar uma integração monolítica gigantesca, a empresa combina:

  • APIs;

  • eventos;

  • conectores;

  • serviços;

  • fluxos;

  • funções;

  • regras;

  • componentes de segurança.

É semelhante à montagem de uma nave modular.

Cada componente possui uma responsabilidade clara.

Um conector acessa o Salesforce.

Outro interage com o SAP.

Um fluxo transforma dados.

Uma API expõe o serviço.

Um evento comunica uma mudança.

A composição desses elementos forma um processo maior.


22. Inteligência artificial na integração

A inteligência artificial começa a assumir funções de apoio ao ciclo de integração.

Ela pode ajudar a:

  • sugerir mapeamentos;

  • gerar documentação;

  • analisar logs;

  • detectar anomalias;

  • explicar erros;

  • identificar gargalos;

  • recomendar rotas;

  • criar testes;

  • auxiliar no desenvolvimento de fluxos.

Imagine dois formatos de dados.

Origem:

{
  "cust_id": 123,
  "full_name": "Nyota Uhura"
}

Destino:

{
  "customerNumber": 123,
  "customerName": "Nyota Uhura"
}

Uma ferramenta com IA pode sugerir que:

cust_id   -> customerNumber
full_name -> customerName

Isso acelera o trabalho.

Mas a IA não conhece automaticamente todas as regras do negócio.

Ela pode não perceber que:

  • o código precisa ter zeros à esquerda;

  • nomes devem ser convertidos para EBCDIC;

  • determinados clientes exigem tratamento especial;

  • o valor monetário utiliza casas decimais implícitas;

  • campos precisam obedecer a regras regulatórias.

Por isso, a validação humana continua essencial.


23. O risco da integração “mágica”

Ferramentas low-code e no-code facilitam a criação de integrações.

Isso é positivo.

Mas existe um risco: criar fluxos sem arquitetura, governança ou documentação.

Uma integração criada rapidamente pode tornar-se crítica.

Depois de dois anos, ninguém sabe:

  • quem a criou;

  • qual sistema depende dela;

  • como reiniciá-la;

  • quais credenciais utiliza;

  • onde está documentada;

  • o que acontece quando falha.

A facilidade de construção não elimina a necessidade de engenharia.

Pelo contrário: quanto mais fácil criar, maior deve ser a disciplina de governança.


24. Passo a passo para analisar uma integração

Quando receber uma demanda de integração, não comece imediatamente escolhendo tecnologia.

Siga uma sequência lógica.

Passo 1: compreenda o processo de negócio

Pergunte:

  • qual evento inicia o processo?

  • quem envia os dados?

  • quem consome?

  • qual resultado o negócio espera?

  • qual é o impacto de uma falha?

A integração não existe por causa do JSON.

Ela existe por causa do negócio.

Passo 2: identifique a origem e o destino

Exemplo:

Origem: transação CICS
Destino: aplicação em nuvem

Descubra:

  • plataformas;

  • protocolos;

  • formatos;

  • volumes;

  • restrições.

Passo 3: determine a necessidade de tempo

A integração deve ser:

  • em tempo real?

  • quase em tempo real?

  • assíncrona?

  • batch?

  • orientada a eventos?

Não transforme tudo em API síncrona.

Um processamento com milhões de registros pode ser melhor em batch.

Passo 4: defina o contrato

Documente:

  • campos;

  • tipos;

  • obrigatoriedade;

  • tamanhos;

  • valores válidos;

  • regras;

  • versões.

Para COBOL, o copybook frequentemente representa parte do contrato.

Para APIs, pode existir OpenAPI.

Para eventos, pode haver JSON Schema ou Avro.

Passo 5: escolha o padrão

Algumas possibilidades:

Arquivo
Fila
API
Evento
Serviço SOAP
Acesso a banco

A escolha deve considerar a necessidade, não o modismo.

Passo 6: planeje falhas

Pergunte:

  • o que acontece se o destino estiver indisponível?

  • haverá retry?

  • haverá fila de erros?

  • a mensagem pode ser duplicada?

  • existe mecanismo de reconciliação?

  • como reiniciar o processo?

Passo 7: implemente observabilidade

Registre:

  • identificador da transação;

  • horário;

  • origem;

  • destino;

  • resultado;

  • código de erro;

  • tempo de processamento.

Passo 8: proteja os dados

Considere:

  • autenticação;

  • autorização;

  • criptografia;

  • mascaramento;

  • auditoria;

  • LGPD;

  • gestão de segredos.

Passo 9: teste cenários ruins

Não teste apenas o caminho feliz.

Teste:

  • campo ausente;

  • mensagem inválida;

  • destino indisponível;

  • timeout;

  • duplicidade;

  • volume alto;

  • resposta inesperada;

  • falha de rede.

Passo 10: documente a operação

A equipe de produção precisa saber:

  • como monitorar;

  • como reiniciar;

  • como identificar mensagens presas;

  • como tratar erros;

  • quem deve ser acionado.


25. Idempotência: a palavra estranha que evita duplicidade

Idempotência significa que repetir uma operação não produz efeitos indesejados adicionais.

Imagine uma solicitação de débito.

A aplicação envia a requisição, mas não recebe resposta por causa de um timeout.

Ela tenta novamente.

Sem proteção, o cliente pode ser debitado duas vezes.

Uma solução é utilizar um identificador único:

ID-TRANSACAO = ABC123456

Antes de efetuar o débito, o sistema verifica se aquele identificador já foi processado.

Esse conceito é fundamental em integrações distribuídas.

No batch, muitas equipes já aplicavam ideias semelhantes usando arquivos de controle, chaves de processamento e mecanismos de restart.

Mais uma vez, o mundo moderno reencontra princípios que os veteranos do mainframe conhecem há décadas.


26. Correlação de mensagens

Uma transação pode atravessar vários sistemas.

Aplicativo
  |
API Gateway
  |
ACE
  |
MQ
  |
CICS
  |
Db2

Como rastrear toda a jornada?

Utilizando um identificador de correlação.

Exemplo:

CORRELATION-ID: 7F9A-2026-000123

Esse valor deve acompanhar a solicitação em todos os componentes.

Assim, ao investigar um problema, a equipe procura o mesmo identificador nos logs.

Sem correlação, cada sistema possui uma parte da história, mas ninguém consegue montar o episódio completo.

É como investigar o desaparecimento de uma nave sem possuir o registro de sua rota.


27. Transformação de dados: o detalhe perigoso

Transformar XML em JSON parece simples.

Mas a verdadeira dificuldade está na semântica.

Considere:

DATA = 01022026

Isso significa:

  • 1º de fevereiro de 2026?

  • 2 de janeiro de 2026?

  • um código sem significado de data?

Agora pense em valores monetários.

COBOL:

05 WS-VALOR PIC S9(9)V99 COMP-3.

Em JSON:

{
  "valor": 1500.75
}

A camada de integração precisa compreender:

  • sinal;

  • escala decimal;

  • formato packed decimal;

  • codificação;

  • tamanho;

  • arredondamento.

Um mapeamento incorreto pode não gerar erro técnico.

Ele pode gerar um valor de negócio errado.

Esse é o tipo mais perigoso de falha: o sistema funciona, mas produz informação incorreta.


28. EBCDIC, ASCII e a ponte entre mundos

O mainframe utiliza frequentemente EBCDIC.

Sistemas distribuídos geralmente utilizam ASCII ou Unicode.

Ao trocar dados, pode ser necessário converter codificações.

Caracteres acentuados, símbolos e campos binários merecem atenção especial.

Um arquivo que parece perfeitamente legível em um ambiente pode tornar-se uma coleção de caracteres estranhos em outro.

Dica do café:

Nunca assuma que um campo PIC X contém apenas texto simples.

Ele pode conter:

  • caracteres;

  • números formatados;

  • flags;

  • bytes especiais;

  • dados binários tratados como área alfanumérica.

Analise o copybook e o processo que grava o campo.


29. O papel do IBM App Connect Enterprise

O ACE ocupa uma posição estratégica porque consegue ligar diferentes gerações de tecnologia.

Ele pode atuar entre:

  • aplicações COBOL;

  • CICS;

  • IMS;

  • Db2;

  • IBM MQ;

  • arquivos;

  • APIs;

  • sistemas SAP;

  • bancos distribuídos;

  • serviços em nuvem;

  • eventos Kafka;

  • aplicações SaaS.

O ACE não “substitui o mainframe”.

Ele permite que o mainframe converse com o restante do ecossistema.

Também não deve concentrar toda a inteligência da empresa.

Seu papel principal é conectar, transformar, rotear e orquestrar.


30. Um exemplo completo

Imagine um cliente solicitando um empréstimo pelo aplicativo.

Etapa 1: aplicativo

O aplicativo envia:

{
  "customerId": 10001,
  "amount": 20000,
  "installments": 24
}

Etapa 2: API Gateway

O gateway:

  • autentica o cliente;

  • valida o token;

  • controla o limite de chamadas;

  • encaminha a requisição.

Etapa 3: ACE

O ACE:

  • valida o JSON;

  • transforma os dados;

  • gera um identificador de correlação;

  • consulta dados complementares;

  • envia a solicitação ao mainframe.

Etapa 4: CICS e COBOL

O programa COBOL:

  • consulta o cliente;

  • verifica renda;

  • analisa restrições;

  • calcula juros;

  • define a aprovação.

Etapa 5: resposta

O resultado retorna:

{
  "status": "APPROVED",
  "approvedAmount": 20000,
  "interestRate": 1.45,
  "installmentValue": 987.31
}

Etapa 6: evento

Após a aprovação, um evento é publicado:

LoanApproved

Consumidores podem:

  • enviar notificação;

  • atualizar CRM;

  • gerar contrato;

  • alimentar analytics;

  • iniciar o processo contábil.

Observe como várias eras convivem:

  • COBOL;

  • CICS;

  • API REST;

  • ACE;

  • mensageria;

  • eventos;

  • aplicações móveis;

  • cloud.

Integração moderna não elimina o passado.

Ela organiza a convivência entre gerações.


31. Problemas comuns e soluções

Problema: tudo depende do ESB

Quando todas as regras e integrações são concentradas em um único barramento, ele pode tornar-se um gargalo.

Solução

Distribuir responsabilidades, modularizar fluxos e utilizar padrões adequados.


Problema: contrato muda sem aviso

Uma aplicação altera um campo e quebra consumidores.

Solução

Usar versionamento, testes de contrato e governança.


Problema: mensagens duplicadas

Uma aplicação repete o envio após um timeout.

Solução

Implementar idempotência e chaves únicas.


Problema: integração sem monitoramento

A mensagem desaparece e ninguém sabe onde.

Solução

Utilizar correlação, logs, métricas, tracing e alertas.


Problema: regra de negócio duplicada

Cada canal implementa sua própria versão.

Solução

Centralizar a regra no domínio correto e expô-la como serviço.


Problema: API para tudo

Processamentos massivos são transformados em milhares de chamadas síncronas.

Solução

Avaliar batch, mensageria ou eventos.


32. Curiosidades da longa jornada

Curiosidade 1: o arquivo nunca morreu

Mesmo em arquiteturas modernas, arquivos continuam sendo utilizados para grandes volumes, intercâmbio com parceiros e processamento analítico.

Curiosidade 2: o ESB não desapareceu

Muitos anunciaram a “morte do ESB”, mas suas funções continuam existindo, distribuídas entre plataformas de integração, gateways, brokers e serviços.

Curiosidade 3: APIs não eliminam mensageria

APIs e mensagens resolvem problemas diferentes.

Uma aplicação pode usar API para consulta e eventos para notificação.

Curiosidade 4: microserviços também precisam integrar

Dividir uma aplicação em dezenas de serviços não elimina a integração. Na verdade, pode aumentar sua necessidade.

Curiosidade 5: o mainframe sempre foi uma plataforma integrada

CICS, IMS, Db2, VSAM, MQ, JES2 e RACF formam há décadas um ecossistema de processamento, segurança e comunicação extremamente sofisticado.


33. Easter egg do Bellacosa Mainframe

Existe uma antiga lenda nos corredores do datacenter.

Dizem que, durante uma madrugada de processamento, um programador encontrou a seguinte mensagem gravada em um arquivo temporário:

INTEGRATION IS NOT ABOUT MOVING DATA.
IT IS ABOUT PRESERVING MEANING.

Ele procurou a origem da mensagem no programa COBOL, no JCL, na PROC, no SORT e no módulo de integração.

Nunca encontrou.

Alguns afirmam que era apenas um registro esquecido por um desenvolvedor.

Outros dizem que foi o fantasma de um arquiteto de sistemas tentando alertar as novas gerações.

A mensagem, porém, contém uma verdade.

Transportar bytes é fácil.

Garantir que o destino compreenda corretamente o significado desses bytes é o verdadeiro desafio.


34. O que o programador COBOL iniciante deve estudar?

Para entrar no mundo da integração, siga uma trilha progressiva.

Primeiro nível: fundamentos

Aprenda:

  • arquivos sequenciais;

  • copybooks;

  • JCL;

  • Db2;

  • CICS;

  • códigos de retorno;

  • tratamento de erros.

Segundo nível: comunicação

Estude:

  • IBM MQ;

  • filas;

  • mensagens;

  • sincronismo;

  • assincronismo;

  • commit;

  • rollback.

Terceiro nível: dados modernos

Conheça:

  • XML;

  • JSON;

  • UTF-8;

  • REST;

  • HTTP;

  • métodos e códigos de resposta.

Quarto nível: plataformas

Explore:

  • IBM App Connect Enterprise;

  • z/OS Connect;

  • API gateways;

  • Kafka;

  • IBM Event Streams.

Quinto nível: arquitetura

Compreenda:

  • SOA;

  • ESB;

  • APIs;

  • event-driven;

  • idempotência;

  • observabilidade;

  • segurança;

  • governança.

Não tente aprender tudo de uma vez.

Comece entendendo o fluxo completo de uma única transação.

Siga o dado desde a origem até o destino.

Depois repita o exercício com outro padrão.


Conclusão: a tecnologia muda, a missão permanece

A integração corporativa começou muito antes das APIs e da nuvem.

Ela começou quando um sistema precisou entregar dados a outro.

Primeiro utilizamos arquivos.

Depois criamos conexões diretas.

Quando as conexões viraram um espaguete, introduzimos middleware.

O middleware evoluiu para barramentos de serviço.

SOA organizou capacidades como serviços.

SOAP trouxe contratos formais.

REST simplificou o consumo por aplicações digitais.

A nuvem tornou o ambiente híbrido.

Kafka e plataformas de eventos popularizaram arquiteturas orientadas a acontecimentos.

Containers trouxeram novas formas de implantação.

A inteligência artificial agora começa a auxiliar na criação, operação e análise das integrações.

Porém, nenhum desses avanços alterou a missão fundamental:

Conectar sistemas
Transformar dados
Preservar significado
Controlar processos
Entregar valor

Para o programador COBOL Padawan, a maior lição é perceber que o mainframe não pertence a um universo separado.

Ele é uma peça central da arquitetura corporativa.

O arquivo gerado por um job pode chegar a uma plataforma analítica.

A mensagem publicada por uma transação CICS pode acionar um serviço em nuvem.

Uma regra COBOL pode ser exposta por uma API móvel.

Uma atualização no Db2 pode originar um evento consumido por dezenas de aplicações.

O código pode ter nascido em uma tela verde, mas seu impacto atravessa APIs, filas, eventos, containers, celulares e nuvens.

No fim, integração não é apenas fazer computadores conversarem.

É garantir que diferentes gerações de tecnologia cooperem sem perder a segurança, a consistência e o conhecimento acumulado pelo negócio.

E essa, jovem Padawan, é uma missão digna não apenas de um arquiteto de integração, mas de todo profissional que deseja compreender como uma empresa realmente funciona por trás das telas coloridas.

A próxima vez que alguém disser que “tudo agora é API”, tome um gole de café, olhe calmamente para o terminal e responda:

— Toda API possui uma história. E há uma boa chance de que, em algum ponto dessa história, exista um programa COBOL mantendo o universo em funcionamento.


Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...