Pular para o conteúdo principal

Messaging Gateway

Descrição​

Messaging Gateway é uma classe que encapsula todo o acesso ao sistema de mensageria e expõe à aplicação uma interface em termos do domínio. Em vez de montar mensagens, definir propriedades e escolher canais, o código de negócio chama um método como obterScoreDeCredito(cliente), com parâmetros tipados.

Somente o gateway sabe que existe mensageria por trás. Ele cria a mensagem, a envia pelo canal e, quando há resposta, a recebe, correlaciona e devolve ao chamador como um valor comum. Trata-se da especialização para mensageria do padrão Gateway de Fowler.

Como o gateway é uma interface comum, é fácil trocá-lo por um stub em testes ou por outra implementação (por exemplo, uma chamada síncrona) sem tocar na lógica de negócio.

Problemas que resolve​

  • Código de negócio espalhado com chamadas diretas à API de mensageria.
  • Dificuldade de testar a aplicação sem um broker.
  • Acoplamento da aplicação a formatos e nomes de canal.

Quando usar​

  • Quando várias partes da aplicação precisam enviar mensagens ou solicitar algo via mensageria.
  • Quando se quer poder substituir a mensageria por outra forma de integração com pouco impacto.

Quando evitar​

  • Quando a aplicação tem um único ponto de envio trivial e a camada extra seria só indireção.
  • Quando a lógica de negócio precisa controlar de forma fina propriedades da mensagem, que o gateway esconderia.

Trade-offs​

GanhoCusto / Risco
Código de negócio limpo e focado no domínioMais uma classe por integração
Testabilidade com gateways falsosInterface síncrona pode esconder a natureza assíncrona da mensageria
Mensageria substituívelEsconder latência e falhas pode induzir uso inadequado
  • Um gateway com retorno síncrono sobre mensageria assíncrona exige correlação e tratamento de timeout.
  • Ele costuma ser o ponto de aplicação de Request-Reply e de Correlation Identifier.

Diagrama​

A lógica de negócio chama um método do domínio; o gateway cuida de montar a mensagem, enviá-la e correlacionar a resposta.

Padrões relacionados​

Referência​