Ir para o conteúdo principal

Processamento de mensagens em filas (MDB)

Para que serve um Message-Driven Bean (MDB)?

OBJETIVO

Definir melhor pratica de desenvolvimento de serviços com processamento em backgroud.

JUSTIFICATIVA

Definir melhor pratica de desenvolvimento de serviços com processamento em backgroud.

RESULTADOS ESPERADOS

A definição de comunicação entre microserviços, afim de subsidiar os processamento em segundo plano.

ENVOLVIDOS:
  • Software Developer:
    • Diego Gonçalves de Almeida
    • Diego Barros de Oliveira
    • Alef Carvalho da Silva
    • Anderson Soares Cardoso
  • Gerente de Desenvolvimento:
    • Janderson de Castro Thomaz
  • Product Owner:
    • Jônatas Justiniano Lima
  • Scrum Master:
    • Edson Masami Hiraçaka
GLOSSÁRIO

O que e um MDB?

É um microserviço que permite processar mensagens assíncronas é síncronas, age como um "Java Message Service (JMS) message listener"
Este serviços divide-se em duas premissas "Consumer" é os "Producer":

    • Consumer: São consumidor de mensagens publicadas em um determinado tópico, este consumidor não depende para o seu funcionamento de um produtor ambos funcionam de forma independente, podendo esta arquitetura possuir vários afim de trabalhar com alto nível de processamento de dados.

image-1631663419844.png

  •  
    • Producer: São usado para enviar mensagens para uma fila ou tópico, e como o consumidor seu serviço e independente.

image-1631663352989.png

Os clientes "Consumer" podem consumir mensagens de forma assíncrona ou síncrona, de acordo com a especificação ou necessidade do sistema. 

Como MDBs são diferente de Entity ou Session?

  • Clientes não acessam MDBs através de interfaces.
  • De várias forma, um MDB parece um stateless session.
    • Instância de MDBs não podem reter estado
    • Todas as instâncias são equivalentes, um container pode usar um pool de MDBs.
    • Um MDB pode processar mensagens de vários clientes.
  • Algum estado pode ser mantido pelo MDB exemplos, (Conexão JMS, conexão com banco de dados entre outros), mas não pode ser específico aos clientes.
  • Características de MDBs.
    • Executam quando recebem uma mensagem.
    • São invocado assincronamente.
    • Normalmente têm curto tempo de vida.
    • Não representam dados compartilhado num Banco de Dados, mas podem prover acesso a esses dados.
    • Podem usar transações.
      • Se a transação sofrer rollback, a mensagem será reposta com "retry", para reprocessamento.
    • São stateless.

Quando usar um MDBs

Só se pode usar uma mensagem assíncrona quando o chamado não precisa de uma resposta imediata, suponto que essas condições se apliquem, segue alguns motivos possíveis:

  • Para melhorar a percepção que o cliente tem do tempo de resposta, sendo uma regra de negócio pede que a resposta seja entregue de forma indireta e não como resposta direta, exemplo (E-mail, Notificações, Push, etc..).
  • Quando a ordem de processamento não importa.
  • Para realizar um bom balanceamento de carga.

image-1631664955770.png

Podendo possuir muitos consumidores e muitos produtores no mesmo tópico

image-1631665366172.png

Desvantagem

  • É mais complexo depurar um código assíncrono do que código síncrono.

Monitoramento

  • Seu monitoramento se da por logs, integrado como exemplo "Splunk", afim de otimizar a integração e suas analise caso precise pesquisar afundo uma determinada ação e comportamento do MDB. 
  • Serviço bem logado se torna mais fácil sua auditoria, e facilita a busca de alguma incidentes que possa ocorrer.