Processamento de mensagens em filas (MDB)
Data de elaboração | 25/11/21 |
---|---|
Responsável pelo estudo |
|
Equipe do estudo | Esquadrão Suicida |
Alvo | MDB |
Origem |
|
Objetivo | Definir melhor pratica de desenvolvimento de serviços com processamento em background. |
Documentação correlata (opcional) |
|
Observações | Não possui. |
1. Introdução
Definir melhor prática de desenvolvimento de serviços com processamento em background.
2. Desenvolvimento
2.1 O que e um MDB?
É um microserviço que permite processar mensagens assíncronas e síncronas, agindo como um "Java Message Service (JMS) message listener".
Este serviços divide-se em duas premissas "Consumer" e 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 consumers afim de trabalhar com alto nível de processamento de dados.
- Producer: São usado para enviar mensagens para uma fila ou tópico, e, como o consumidor, seu serviço é independente.
Os clientes "Consumer" podem consumir mensagens de forma assíncrona ou síncrona, de acordo com a especificação ou necessidade do sistema.
2.2 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.
2.3 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.
Podendo possuir muitos consumidores e muitos produtores no mesmo tópico
2.4 Desvantagem
- É mais complexo depurar um código assíncrono do que código síncrono.
2.5 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.
3. Conclusão
A partir do desenvolvimento foi concluído que é importante a utilização de um sistema de filas para ter uma comunicação assíncrona, evitando esperas desnecessárias.