Uso no mundo real de filas JMS / mensagem? [fechadas]

182

Eu estava lendo um pouco sobre JMS e Apache ActiveMQ. E estava se perguntando para que uso no mundo real as pessoas usaram JMS ou tecnologias similares de fila de mensagens?

n
fonte

Respostas:

191

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

Um exemplo do mundo real é o de um aplicativo Web usado para fazer um pedido para um cliente específico. Como parte da colocação desse pedido (e do armazenamento em um banco de dados), você pode realizar várias tarefas adicionais:

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

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

Jon
fonte
Oi @ jon, você viu esta tag de documentação? stackoverflow.com/documentation/jms/commit eles só precisam de um apoio committer para permitir o tema, eu acho que você poderia ser o único :) que lhes permite dar-nos docs impressionantes em JMS
juanmf
@ Jon como eu entendo jms é em si é uma implementação do padrão de integração empresarial?
valik
Não, mula ou Camel seria ...
Jon
1
Se algum número de aplicativos estiver consumindo as mensagens na fila, como a fila sabe quando excluir as mensagens antigas?
Basil Bourque 23/09
95

Use-os o tempo todo para processar operações de longa execução de forma assíncrona. Um usuário da web não vai querer esperar mais de 5 segundos para processar uma solicitação. Se você tiver um que seja mais longo que isso, um design será enviar a solicitação para uma fila e enviar imediatamente de volta uma URL que o usuário pode verificar para ver quando o trabalho é concluído.

A publicação / assinatura é outra boa técnica para dissociar remetentes de muitos receptores. É uma arquitetura flexível, porque os assinantes podem entrar e sair conforme necessário.

duffymo
fonte
41
Depois de ler a sua resposta que eu estou indo para adicionar JMS à minha fila 'O que eu estou indo para aprender este ano' :)
Roman
Atualmente, em vez de usar a especificação JMS, podemos usar chamadas de método assíncronas. Para obter mais informações, consulte: docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html
geo
3
Eles não são exatamente iguais. Não há entrega garantida com uma chamada de método assíncrona; nenhuma noção de tópicos que podem ser enviados para vários ouvintes ao mesmo tempo.
duffymo
75

Eu tive tantos usos incríveis para o JMS:

  • Comunicação por bate-papo na Web para atendimento ao cliente.

  • Depuração de log no back-end. Todos os servidores de aplicativos transmitiram mensagens de depuração em vários níveis. Um cliente JMS pode então ser iniciado para observar as mensagens de depuração. Claro que eu poderia ter usado algo como syslog , mas isso me deu todo tipo de maneira de filtrar a saída com base em informações contextuais (eq pelo nome do servidor de aplicativos, chamada da API, nível da log, ID do usuário, tipo de mensagem, etc.). Também colori a saída.

  • Depurar o log no arquivo. Da mesma forma que acima, apenas partes específicas foram extraídas usando filtros e registradas no arquivo para registro geral.

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

  • Configurando e controlando dinamicamente clusters de software. Cada servidor de aplicativos transmitia uma mensagem "configure me" e, em seguida, um daemon de configuração que respondia com uma mensagem contendo todos os tipos de informações de configuração. Mais tarde, se todos os servidores de aplicativos precisassem que suas configurações fossem alteradas ao mesmo tempo, isso poderia ser feito no daemon de configuração.

  • E as transações usuais na fila para atividades atrasadas, como cobrança, 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.

mikesomeone
fonte
5
Não me parece correto usar o JMS para o log de depuração. Filas e mensagens têm um custo significativo e o log (para depuração que geralmente registra muito) deve ser o mais rápido possível.
Marco Altieri
19

Computação síncrona distribuída.
Um exemplo do mundo real pode 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. Portanto, o aplicativo atuaria como um Producercriando um Messageobjeto, colocando-o em particular Queuee seguindo em frente.
Haveria um conjunto de Consumers que assinaria o item Queueem questão e cuidaria de lidar com os Messageenviados. Observe que durante o curso dessa transação, os Producers são dissociados da lógica de como um dado Messageseria tratado.
As estruturas de mensagens (ActiveMQ e similares) atuam como uma espinha dorsal para facilitar essas Messagetransações, fornecendo MessageBrokers.

pugmarx
fonte
Desejo processamento assíncrono porque o RestService Api é síncrono. Como fazê-lo com o ActiveMq e o Jms. Por favor, ajude nisso. stackoverflow.com/questions/19706788/… . Obrigado por sua ajuda e tempo
Kumar
10

Usei-o para enviar transações intradia entre diferentes sistemas de gestão de fundos. Se você quiser saber mais sobre o que é uma ótima mensagem de tecnologia, recomendo completamente o livro " Padrões de integração corporativa ". Existem alguns exemplos JMS para coisas como solicitação / resposta e publicação / assinatura.

O sistema de mensagens é uma excelente ferramenta para integração.

RichardOD
fonte
8

Nós o usamos para iniciar o processamento assíncrono que não queremos interromper ou entrar em conflito com uma transação existente.

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

Kevin Williams
fonte
1
Por favor ajude nisto. stackoverflow.com/questions/19706788/… . Obrigado por sua ajuda e tempo.
Kumar
2
Porém, devido à solicitação ser assíncrona, devido a um problema de rede, sua mensagem pode não ser enviada. Que tal isso? Quando você deseja comprar coisas, sua nitificação deve ser enviada. não é?
grep
8

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

  1. Atualize a posição dos pedidos feitos pelos clientes, à medida que a remessa viaja de um local para outro. Isso foi feito enviando mensagens continuamente para a fila JMS.
  2. Alerta sobre eventos incomuns, como atraso no envio e envio de email ao cliente.
  3. Se a entrega atingir seu destino, enviando um evento de entrega.

Também tivemos vários clientes remotos implementados, conectados ao servidor principal. Se a conexão estiver disponível, eles usam para acessar o banco de dados principal ou, se não, usam seu próprio banco de dados. 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 mensagem 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.

qwerty
fonte
6

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

No meu caso, usei o JMS no desenvolvimento de um MOM (middleware orientado a mensagens) em minha tese, em que tipos específicos de objetos orientados a objetos são gerados de um lado como sua solicitação e compilados e executados do outro lado como sua resposta .

paradisonoir
fonte
6

O Apache Camel usado em conjunto com o ActiveMQ é uma ótima maneira de executar padrões de integração corporativa

Rob Davies
fonte
5

Usamos mensagens para gerar cotações on-line

bluegene
fonte
4

Estamos usando o JMS para comunicação com sistemas em um grande número de sites remotos através de redes não confiáveis. O acoplamento flexível, combinado com mensagens confiáveis, produz um cenário estável do sistema: cada mensagem será enviada assim que for tecnicamente possível, problemas maiores na rede não terão influência em todo o cenário do sistema ...

roundrobin
fonte