Uso no mundo real de JMS / filas de mensagens?

Eu estava lendo apenas um pouco sobre o JMS e o Apache ActiveMQ. E queria saber o que o uso do mundo real tem as pessoas aqui usado JMS ou tecnologias de fila de mensagens semelhantes para?

O JMS (ActiveMQ é uma implementação do broker JMS) pode ser usado como um mecanismo para permitir o processamento de solicitação assíncrona. Você pode desejar fazer isso porque a solicitação demora muito para ser concluída ou porque várias partes podem estar interessadas na solicitação real. Outra razão para usá-lo é permitir que vários clientes (potencialmente escritos em idiomas diferentes) acessem informações via JMS. O ActiveMQ é um bom exemplo aqui porque você pode usar o protocolo STOMP para permitir access de um cliente C # / Java / Ruby.

Um exemplo do mundo real é o de um aplicativo da Web usado para fazer um pedido para um cliente específico. Como parte da colocação dessa ordem (e armazená-la em um database), você pode querer levar uma série de tarefas adicionais:

  • Armazene o pedido em algum tipo de sistema de back-end de terceiros (como o SAP)
  • Envie um e-mail para o cliente para informá-lo de que o pedido foi feito

Para fazer isso, o código do seu aplicativo publicaria uma mensagem em uma fila do JMS que inclui um ID do pedido. Uma parte do seu aplicativo ouvindo a fila pode responder ao evento, pegando o orderId, procurando o pedido no database e, em seguida, fazer o pedido com outro sistema de terceiros. Outra parte do seu aplicativo pode ser responsável por fazer o pedido e enviar um e-mail de confirmação ao cliente.

Use-os o tempo todo para processar operações de longa execução de forma assíncrona. Um usuário da Web não desejará esperar mais de 5 segundos para que uma solicitação seja processada. Se você tiver um que execute mais do que isso, um design será enviar a solicitação para uma fila e enviar imediatamente de volta uma URL que o usuário possa verificar quando a tarefa for concluída.

Publicar / assinar é outra boa técnica para dissociar remetentes de muitos receptores. É uma arquitetura flexível, porque os assinantes podem entrar e sair quando necessário.

Eu tive tantos usos incríveis para o JMS:

  • Comunicação por chat na Web para atendimento ao cliente.

  • Depuração de log no backend. Todos os servidores de aplicativos transmitiram mensagens de debugging em vários níveis. Um cliente JMS pode então ser lançado para observar mensagens de debugging. Claro que eu poderia ter usado algo como syslog, mas isso me deu todos os tipos de maneiras de filtrar a saída com base em informações contextuais (eq por nome do servidor de aplicativos, chamada de api, nível de log, userid, tipo de mensagem, etc …). Eu também colori a saída.

  • Depurar log para o arquivo. O mesmo que acima, somente peças específicas foram retiradas usando filtros e registradas no arquivo para log geral.

  • Alertando. Novamente, uma configuração semelhante ao registro acima, observando erros específicos e alertando as pessoas por vários meios (e-mail, mensagem de texto, mensagem instantânea, Growl pop-up …)

  • Configuração e controle dynamics de clusters de software. Cada servidor de aplicativos transmitia uma mensagem “configure me”, em seguida, um daemon de configuração que respondia com uma mensagem contendo todos os tipos de informações de configuração. Posteriormente, se todos os servidores de aplicativos precisassem de suas configurações alteradas de uma só vez, isso poderia ser feito a partir do daemon de configuração.

  • E as usuais – transactions enfileiradas para atividades atrasadas, como faturamento, processamento de pedidos, provisionamento, geração de e-mail …

É ótimo em qualquer lugar que você queira garantir a entrega de mensagens de forma assíncrona.

Computação síncrona distribuída (a).
Um exemplo do mundo real poderia ser uma estrutura de notificação para todo o aplicativo, que envia e-mails para as partes interessadas em vários pontos durante o curso do uso do aplicativo. Assim, o aplicativo atuaria como um Producer , criando um object Message , colocando-o em uma Queue específica e avançando.
Haveria um conjunto de Consumer que assinaria a Queue em questão e cuidaria da manipulação da Message enviada. Observe que, durante o curso dessa transação, os Producer estão desacoplados da lógica de como uma determinada Message seria tratada.
As estruturas de mensagens (ActiveMQ e os favoritos) atuam como um backbone para facilitar essas transactions de Message fornecendo MessageBroker s.

Eu usei para enviar negociações intraday entre diferentes sistemas de gerenciamento de fundos. Se você quiser saber mais sobre o que é uma ótima tecnologia de mensagens, eu recomendo completamente o livro ” Enterprise Integration Patterns “. Existem alguns exemplos de JMS para coisas como solicitação / resposta e publicação / assinatura.

Mensagens é uma excelente ferramenta para integração.

Usamos isso para iniciar o processamento asynchronous que não queremos interromper ou entrar em conflito com uma transação existente.

Por exemplo, digamos que você tenha uma lógica muito cara e muito importante, como “comprar coisas”, uma parte importante do material de compra seria “notificar loja de coisas”. Fazemos a chamada de notificação assíncrona para que qualquer lógica / processamento envolvido na chamada de notificação não bloqueie ou lide com resources com a lógica de negócios de compra. Resultado final, compra completa, usuário feliz, recebemos nosso dinheiro e, como a entrega da fila é garantida, a loja é notificada assim que é aberta ou assim que há um novo item na fila.

Eu vi o JMS usado em diferentes projetos comerciais e acadêmicos. JMS pode facilmente entrar em sua imagem, sempre que você quiser ter um sistema distribuído totalmente dissociado. De um modo geral, quando você precisa enviar sua solicitação de um nó, e alguém em sua rede cuida dela sem / fornecer ao remetente qualquer informação sobre o destinatário.

No meu caso, eu usei o JMS no desenvolvimento de um middleware orientado a mensagens (MOM) em minha tese, onde tipos específicos de objects orientados a object são gerados em um lado como seu pedido, e compilados e executados no outro lado como sua resposta .

Eu usei para o meu projeto acadêmico, que era um site de varejo online semelhante ao da Amazon. O JMS foi usado para lidar com os seguintes resources:

  1. Atualize a posição das encomendas feitas pelos clientes, pois a remessa viaja de um local para outro. Isso foi feito enviando continuamente mensagens para a Fila JMS.
  2. Alerta sobre quaisquer events incomuns, como o embarque atrasado e o envio de email para o cliente.
  3. Se a entrega for atingida, envie um evento de entrega.

Tínhamos vários clientes remotos também implementados conectados ao servidor principal. Se a conexão estiver disponível, eles usam para acessar o database principal ou, se não, usar seu próprio database. Para lidar com a consistência dos dados, implementamos o mecanismo 2PC. Para isso, usamos o JMS para trocar as mensagens entre esses sistemas, ou seja, um atuando como coordenador que iniciará o processo enviando mensagens na fila e outros responderão de acordo enviando novamente uma mensagem na fila. Como outros já mencionaram, isso foi semelhante ao modelo pub / sub.

Usamos mensagens para gerar cotações on-line

O Apache Camel usado em conjunto com o ActiveMQ é uma ótima maneira de fazer Padrões de Integração Empresarial

Estamos usando o JMS para comunicação com sistemas em um grande número de sites remotos em redes não confiáveis. O acoplamento flexível em combinação com mensagens confiáveis ​​produz uma paisagem de sistema estável: cada mensagem será enviada assim que for tecnicamente possível, problemas maiores na rede não terão influência em toda a paisagem do sistema …