Eu pesquisei e ele costumava enviar mensagens entre 2 sistemas.
Mas por que? Por que você simplesmente não usa um Database
?
Deve haver algum recurso que ActiveMQ
tem que Databases
não tem?
Eu pesquisei e ele costumava enviar mensagens entre 2 sistemas.
Mas por que? Por que você simplesmente não usa um Database
?
Deve haver algum recurso que ActiveMQ
tem que Databases
não tem?
Respostas:
Ele é usado para comunicação confiável entre dois processos distribuídos.
Sim, você poderia armazenar mensagens em um Banco de Dados para comunicação entre dois processos, mas, assim que a mensagem fosse recebida, você teria que DELETE
enviar a mensagem, Isso significa uma linha INSERT
e DELETE
para cada mensagem.
Quando você tenta escalar isso comunicando milhares de mensagens por segundo, os Bancos de Dados tendem a cair .
ActiveMQ
Por outro lado, o middleware orientado a mensagens [MOM] foi criado para lidar com esses casos de uso.
Eles assumem que as mensagens em um sistema saudável serão excluídas muito rapidamente e podem fazer otimizações para evitar a sobrecarga .
Ele também pode enviar mensagens aos consumidores em vez de um consumidor ter que pesquisar a nova mensagem fazendo uma consulta SQL.
Isso reduz ainda mais a latência envolvida no processamento de novas mensagens enviadas para o sistema.
ActiveMQ
ou, em geral, todas as implementações de Message Oriented Middleware (MOM) são projetadas com o propósito de enviar mensagens entre dois aplicativos ou dois componentes dentro de um aplicativo.
Essencialmente, o MOM e os bancos de dados compartilham uma base comum, pois fornecem armazenamento de dados transacional e persistente para leitura e gravação.
A grande diferença é o padrão de uso - onde os bancos de dados são muito genéricos e otimizados para pesquisas complexas em várias tabelas, o MOM é otimizado para ler mensagens, uma por vez, em um estilo FIFO [Fila].
JMS
, que é uma API que o ActiveMQ implementa, é uma pedra angular importante nos aplicativos Java Enterprise. Isso faz com que as mensagens compartilhem um formato e uma semântica bastante comuns, o que torna a integração entre diferentes aplicativos mais fácil.
Claro, há uma série de características mais detalhadas que são apenas em ActiveMQ, protocolos de arame como OpenWire
, STOMP
e MQTT
, JMS
, EIP
juntamente com Apache Camel, padrões de mensagens como "pedido / resposta" e "publish / subscribe", JMS Bridging, de agrupamento (" rede de corretores "), que permitem escalonamento e distribuição, etc.
Você deve ler um pouco sobre esses tópicos se estiver interessado, uma vez que eles são bastante grandes.
ActiveMQ
tem um ótimo suporte a agendadores , o que significa que você pode agendar o envio de sua mensagem para ser entregue em um determinado horário .
Usamos esse recurso para enviar lembretes de medicamentos aos pacientes que enviam seus detalhes de medicamentos em um cenário de saúde.
Scheduled Jobs
de dados Oracle para os mesmos fins.
Com o RDBMS, quando você processa uma linha de dados, normalmente atualiza um sinalizador que indica que a linha foi processada para que o processamento não seja repetido.
No entanto, com o Message Queue, você só precisa reconhecer uma mensagem e o próximo consumidor processará a próxima.
A diferença é que a UPDATE
instrução em um RDBMS é uma operação muito lenta em comparação com oacknowledge
em activmeq.
Eu gostaria de enfatizar o seguinte:
Desacoplado : os sistemas podem se comunicar sem estar conectados. A fila está entre os sistemas, uma falha do sistema nunca afetará a outra, pois a comunicação é feita por meio da fila. Os sistemas continuam a funcionar quando estão funcionando.
Suporte de recuperação : as mensagens nas próprias Filas persistiram. As mensagens podem ser restauradas posteriormente se a fila falhar.
Comunicação confiável : considere um sistema que processa solicitações do cliente. Em casos normais, o sistema recebe 100 solicitações por minuto. Este sistema não é confiável quando o número de solicitações ultrapassa a média. Nesse caso, a Fila pode gerenciar solicitações e enviar mensagens periodicamente com base na taxa de transferência do sistema sem interrompê-la.
Assíncrono : a comunicação cliente-servidor não é bloqueadora. Depois que o cliente envia a solicitação ao servidor, ele pode fazer outras operações sem esperar pela resposta. Quando a resposta recebida, o cliente pode lidar com isso a qualquer momento.
Da Wikipedia
Apache ActiveMQ é um agente de mensagens de código aberto escrito em Java junto com um cliente Java Message Service (JMS) completo. Ele fornece "Recursos Corporativos" que, neste caso, significa promover a comunicação de mais de um cliente ou servidor
Em relação às suas dúvidas:
Por que você não usaria um banco de dados?
Você deve usar o banco de dados para dados persistentes e não para dados temporários. Suponha que você precise enviar uma mensagem do remetente para o destinatário. Ao receber a mensagem, o Receptor executa uma operação (receber, processar e esquecer). Depois de processar essa mensagem, você não precisa mais dela. Nesse caso, armazenar a mensagem em um banco de dados persistente não é a solução certa.
Eu concordo totalmente com a resposta de @Hiram Chirino sobre a inserção e exclusão de mensagens no banco de dados se você usar o banco de dados em vez do sistema de mensagens.
Benefícios deste artigo e deste artigo
Deve haver um recurso que o ActiveMQ tem que os bancos de dados não têm?
Há muitos. Dê uma olhada na página de documentação para mais detalhes. Dê uma olhada nos casos de uso também.
Dê uma olhada nesta apresentação para entender os aspectos internos do ActiveMQ.
Suponha que você tenha um aplicativo que está sendo usado em vários locais ao mesmo tempo. Suponha também que seu aplicativo deve lidar com 1000s de solicitações por minuto ou algo parecido, de modo que as operações normais do banco de dados não possam lidar com tais operações. O Activemq atua como o processamento de mensagens, levando todas as mensagens para a fila, mesmo se um de seus aplicativos falhar em um local o outro local não será afetado.