Para que é usado o ActiveMQ - podemos aplicar o conceito de mensagens usando um banco de dados?

116

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 ActiveMQtem que Databasesnão tem?

ahmednabil88
fonte
Pergunta semelhante stackoverflow.com/q/2868800/460775
EMBarbosa

Respostas:

178

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 DELETEenviar a mensagem, Isso significa uma linha INSERTe DELETEpara cada mensagem.
Quando você tenta escalar isso comunicando milhares de mensagens por segundo, os Bancos de Dados tendem a cair .

ActiveMQPor 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.

Hiram Chirino
fonte
Boa explicação! Os dois processos distribuídos devem ser do mesmo processo? Quero dizer duas instâncias do mesmo aplicativo?
Maverick,
Não, aplicativos arbitrários podem se comunicar uns com os outros pelo ActiveMQ. Por exemplo, os aplicativos A e B poderiam criar qeues AB e BA (leia-se: mensagens para A de B e vice-versa) e enviar mensagens um para o outro para a fila correspondente.
Alex
você pode dar uma olhada stackoverflow.com/questions/48579060/… ?
gstackoverflow
67

ActiveMQou, 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, STOMPe MQTT, JMS, EIPjuntamente 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.

Petter Nordlander
fonte
25

ActiveMQtem 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.

Shoab Alam
fonte
3
Isso é bem legal. Usamos a biblioteca de agendamento Quartz para fins de lembrete semelhantes.
Siddhartha
Usamos o banco Scheduled Jobsde dados Oracle para os mesmos fins.
ahmednabil88
15

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 UPDATEinstrução em um RDBMS é uma operação muito lenta em comparação com oacknowledge em activmeq.

user3462208
fonte
8

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.

Vino
fonte
7

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

  1. Integração empresarial : permitindo que aplicativos construídos com diferentes linguagens e em diferentes sistemas operacionais se integrem entre si
  2. Transparência de localização : os aplicativos clientes não precisam saber onde os aplicativos de serviço estão localizados
  3. Comunicação confiável - os produtores / consumidores de mensagens não precisam estar disponíveis ao mesmo tempo
  4. Escalonamento - pode escalar horizontalmente adicionando mais serviços
  5. Comunicação assíncrona - um cliente pode disparar uma mensagem e continuar outro processamento em vez de bloquear até que o serviço envie uma resposta;
  6. Acoplamento reduzido - as premissas feitas pelos clientes e serviços são bastante reduzidas em decorrência dos 5 benefícios anteriores. Um serviço pode alterar detalhes sobre si mesmo, incluindo sua localização, protocolo e disponibilidade, sem afetar ou interromper o cliente.

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.

Ravindra babu
fonte
2

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.

Shubham
fonte