Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Quando usar mensageria ao invés de web services?

Quando eu devo pensar em optar pelo uso de mensageria ao invés de um web service? Não ficou muito claro pra mim pelo vídeo conceitual. Poderiam dar um exemplo na prática e da vida real? Por mensageria eu só consigo integrar sistemas java? Ou tenho como enviar pra fila um documento JSON ou XML para ser consumido por um outro sistema em outra linguagem sem ser java? Sei que a especificação JMS é java, mas teria alguma forma de integrar com outros sistemas independente da linguagem de programação

4 respostas

Olá Haylson,

Geralmente os WebServices são síncronos, ou seja, a cada requisição feita para eles o cliente (requisitante) aguarda até receber uma resposta. A primeira desvantagem dessa abordagem é que se a operação executada pelo WebService demorar um pouco o requisitante vai ter que esperar, isso pode gerar lentidão. É claro que existem WebServices assíncronos, mas não vamos falar disso agora.

Outro problema que pode ocorrer, é que se por acaso o WebService estiver indisponível todas as requisições feitas para ele serão perdidas. Porém quando utilizamos um MOM para intermediar a comunicação nós ganhamos resiliência, pois mesmo que a outra ponta esteja indisponível, a requisição será recebida e armazenada e assim que o sistema voltar a funcionar ele irá ler todas as mensagens e processar todas as requisições que ficaram enfileiradas no MOM, ou seja, você diminui bastante o acoplamento da integração.

Em resumo o MOM é uma maneira um pouco mais sofisticada de integração que possui algumas vantages sobre as demais, um exemplo claro seria um sistema de E-COMMERCE que chama um outro sistema que gera nota fiscal, sem um MOM, caso o sistema de notas fique indisponível o E-COMMERCE ficará incapaz de vender pois ocorrerá erros, porém com o MOM a requisição será enfileirada e a nota fiscal será gerada posteriormente tornando o problema transparente para o usuário.

O MOM não tem nenhuma relação direta com Java, qualquer linguagem pode conectar no MOM, ler e enviar mensagens nele. Inclusive um sistema em Java pode enviar uma mensagem e um sistema em C# pode le-las. O JMS é apenas um conjunto de especificações que visam facilitar a comunicação do Java com um MOM, ele tenta estabelecer um contrato para que a comunicação do Java com o MOM seja padronizada. Porém qualquer linguagem pode se comunicar com o MOM, eles não vão utilizar o JMS mas sim a forma mais popular da linguagem que ele esta usando.

Olá Denis Ricci, muito obrigado pela resposta.

Ainda assim, gostaria de comentar um tópico que você comentou, sobre utilizar um webservice de forma assíncrona, dessa forma eu conseguiria substituir a utilização de mensageria por webservice, ou teria mais algum impedimento?

Mudando de assunto, vi que no site do ActiveMQ realmente ele suporta clients em outras linguagens. (Supports a variety of Cross Language Clients and Protocols from Java, C, C++, C#, Ruby, Perl, Python, PHP) .

solução!

Então, vamos falar um pouco mais sobre esse tema.

Primeiramente é importante deixar claro que toda abordagem tem suas vantagens e desvantagens, apesar das desvantagens que citei sobre o WebService ele é de longe a abordagem mais utilizada em integrações de sistemas, pois ele é de fácil implementação, manutenção além de ser uma solução bem simples e barata. Utilizar um MOM possui muitas vantagens conforme eu já citei no primeiro POST, porém é uma solução mais complexa que pode exigir um servidor adicional ou até mesmo uma FilaMQ paga, porém em alguns casos o seu uso será necessário.

Referente aos WebServices assíncronos, eles funcionam mais ou menos assim, quando client efetuar uma requisição o WebService ao invés de aguardar o termino do processamento para devolver uma resposta ao cliente, ele imediatamente vai retornar um ID de referencia e processar de forma assíncrona, logo o cliente não precisa a aguardar o termino do processo, porém é importante existir um WebService para consultar o status do processamento. Apesar de ser uma abordagem interessante, ele só é usado quando você tem um processamento muito demorado entretanto ele não vai substituir o MOM por três principais motivos:

1 - Mesmo que o WebService seja assincrono, se o sistema estiver fora do ar o cliente não conseguirá acessa-lo.

2 - O MOM tem diversos controles e configurações, como por exemplo quantidade de retentativas de entrega de mensagens, armazenar requisições com problemas em outras filas, etc.

3 - Além de filas o MOM pode possuir tópicos também que utiliza o conceito de publisher/subscriber, você não vai conseguir esse recurso com WebService assincrono.

Obrigado pela resposta, ficou mais claro algumas coisas.