← Wiki

Padrões de integração no Mule: catálogo

  • 7 min de leitura
Nesta página

Código

Esta página liga cada padrão do livro Enterprise Integration Patterns (Hohpe e Woolf) ao componente ou recurso do Mule 4 que o implementa. Ela também aponta a página da série que explica o padrão com um exemplo que roda. O porquê da série está no artigo Padrões de integração no Mule: você já usa, só não sabe o nome.

As seções seguem os grupos do livro. A pergunta de cada linha resume o problema do padrão a partir da página dele no site do livro.

Canais: por onde a mensagem passa

Padrão Pergunta que ele responde No Mule Página
Point-to-Point Channel Como garantir que um único receptor consuma cada mensagem? Fila do Anypoint MQ, no broker. As filas do VM Connector também entregam cada mensagem a um só consumidor, mas vivem dentro do runtime do Mule e não substituem um broker Em breve
Publish-Subscribe Channel Como entregar o mesmo evento a todos os interessados? Message exchange do Anypoint MQ (o recurso do broker, não o Anypoint Exchange dos assets), que, sem regras de roteamento nos bindings, copia cada mensagem para todas as filas ligadas a ela Publish-subscribe
Dead Letter Channel O que fazer com a mensagem que não pode ser entregue? Dead letter queue do Anypoint MQ: depois de um número de tentativas de entrega sem confirmação (10 por padrão), o broker move a mensagem para a DLQ da fila Dead letter channel
Invalid Message Channel O que fazer com a mensagem que chega, mas não faz sentido para o receptor? Sem componente próprio; um tratamento de erro que manda a mensagem para uma fila separada da DLQ, porque tentar de novo não vai consertá-la Em breve
Guaranteed Delivery Como não perder a mensagem se o sistema de mensagens cair? Filas do Anypoint MQ; filas VM persistentes, que não existem no CloudHub 2.0 nem no Runtime Fabric; o padrão de confiabilidade da documentação do Mule Em breve
Channel Adapter Como ligar uma aplicação ao sistema de mensagens? O papel dos conectores (Database, Salesforce, SFTP…) Em breve

Construção da mensagem: o que ela carrega

Padrão Pergunta que ele responde No Mule Página
Request-Reply Como receber uma resposta numa troca por mensagens? HTTP Request; operação Publish Consume do VM Em breve
Return Address Como quem responde sabe para onde mandar a resposta? A fila temporária de resposta que o Publish Consume do VM cria e descarta sozinho Em breve
Correlation Identifier Como saber a que requisição uma resposta pertence? Um ID levado na requisição e devolvido na resposta. O correlationId do Mule faz um papel parecido entre aplicações: o HTTP Request o envia no header X-CORRELATION-ID, o listener da aplicação chamada o adota, e os logs das duas mostram o mesmo ID Correlation identifier
Message Expiration Como indicar que uma mensagem ficou velha e não deve mais ser processada? O tempo de vida (TTL) da fila do Anypoint MQ, de no máximo duas semanas Em breve

Roteamento: para onde a mensagem vai

Padrão Pergunta que ele responde No Mule Página
Content-Based Router Como mandar cada mensagem ao destino certo a partir do conteúdo? Choice Em breve
Message Filter Como descartar as mensagens que não interessam? Um Choice em que só a rota das mensagens aceitas tem processamento. O Choice não encerra o flow: o que vier depois dele roda para todas as mensagens, inclusive as descartadas Em breve
Splitter Como processar uma mensagem que traz vários itens? For Each, Parallel For Each Em breve
Aggregator Como juntar mensagens relacionadas numa só? O módulo Aggregators, com agregadores por tamanho, por tempo e por grupo; a agregação do Scatter-Gather Em breve
Scatter-Gather Como enviar a vários destinos e juntar as respostas? Scatter-Gather. Se uma rota falha, ele lança MULE:COMPOSITE_ROUTING com os erros e os resultados das rotas que deram certo Em breve
Process Manager Como conduzir uma mensagem por vários passos quando eles podem não ser conhecidos de antemão nem sequenciais? Sem componente próprio. Um flow que guarda o estado do processo (num object store ou banco, quando o processo atravessa mais de uma execução) e decide o próximo passo a partir dos resultados intermediários Em breve

Transformação: o que muda no conteúdo

Padrão Pergunta que ele responde No Mule Página
Message Translator Como sistemas com formatos diferentes trocam dados? Transform Message (DataWeave) Em breve
Content Filter Como lidar com uma mensagem grande quando só alguns campos interessam? Transform Message selecionando ou removendo campos. O Message Filter descarta a mensagem inteira; o Content Filter enxuga o conteúdo Em breve
Canonical Data Model Como reduzir as dependências entre aplicações com formatos diferentes? Sem componente; um modelo comum entre as APIs Em breve
Content Enricher Como completar uma mensagem que não traz todos os dados? A target variable de uma operação guarda o dado buscado sem apagar o payload; um DataWeave junta os dois Em breve
Claim Check Como reduzir o volume de dados que viaja na mensagem sem perder informação? Sem componente; Object Store ou armazenamento externo, com só a chave viajando na mensagem Em breve

Endpoints: como a aplicação recebe e consome

Padrão Pergunta que ele responde No Mule Página
Event-Driven Consumer Como consumir mensagens assim que elas chegam? As fontes de evento: HTTP Listener, VM Listener, Subscriber do Anypoint MQ Em breve
Polling Consumer Como consumir uma mensagem quando a aplicação estiver pronta? Um Scheduler seguido de uma leitura; a operação Consume do VM e do Anypoint MQ Em breve
Competing Consumers Como processar várias mensagens da mesma fila ao mesmo tempo? Os consumidores concorrentes do listener VM (4 por padrão), ou várias réplicas na mesma fila Em breve
Idempotent Receiver Como receber a mesma mensagem duas vezes sem efeito dobrado? Idempotent Message Validator, com uma chave de negócio no idExpression Idempotent receiver
Transactional Client Como controlar a transação com o sistema de mensagens? Transações iniciadas na fonte do evento ou num Try Em breve

Onde a coluna “No Mule” diz “sem componente próprio”, o padrão continua valendo, mas é você quem o monta com flows, configuração e uma decisão de projeto.

O exemplo que acompanha a série

O cenário é sempre o mesmo: um pedido que passa por pagamento, estoque e nota fiscal. Os padrões que rodam dentro do Mule têm exemplo executável no repositório mulesoft-patterns-examples, em src/main/mule/eip/<padrão>/, cada um com sua suíte MUnit e sem sistemas externos. Os que dependem do Anypoint MQ, como o message exchange e a DLQ, são explicados na página com a configuração do broker, a partir da documentação, porque não rodam sem ele.

git clone https://github.com/brunosouzas/mulesoft-patterns-examples.git
cd mulesoft-patterns-examples
mvn clean test

O MUnit roda no runtime Enterprise, então o Maven precisa de acesso ao repositório Enterprise da MuleSoft (credenciais no ~/.m2/settings.xml).

Código desta página