fbpx
Messaging Patterns: RPC – Remote Procedure Call
Publicado em: domingo, 24 de out de 2021

RPC pode parecer sofisticado demais, mas que tal Request/Response? Agora "SOA" familiar? Nem só de total assincronismo vive o mundo da mensageria, há momentos em que precisamos de uma resposta. RPC é a forma mais prática de adotar mensageria, mas é preciso entender as consequências dessa abordagem.

Revisão 2

O que vou mostrar aqui é um padrão bem antigo, mas bem confuso para quem está começando. Trata-se do uso de filas para enviar e receber respostas. Enviar um request e receber um response.

O fato de ser um padrão conhecido, não o faz dele nem melhor nem pior. No entanto, o uso negligente e inadvertido de RPC com mensageria é um dos fatores de fracasso de projetos que conheço. E isso se dá por não entender as implicações dessa escolha.

Não basta usar filas, é preciso usar uma estratégia que traga os benefícios.

Afinal, o que é RPC?

Remote Procedure Call, ou a capacidade de chamar funções remotas usando uma infra assíncrona de mensageria como base. Embora o nome seja "procedure"/"procedimento", visualizamos mais fácil quando pensamos em Remote Function Call, já que estamos falando de algo com retorno.

É preciso uma coreografia

Para que esse fluxo funcione algumas coisas são necessárias:

O consumidor começa consumindo sua fila padrão. Aquela fila que tem um nome bonitinho e que é alcançada via uma exchange. Fila e exchange são pré estabelecidas.

O consumidor está pronto para receber uma mensagem e olhar um cabeçalho, que informa para qual fila enviar uma resposta.

Já o publisher antes de enviar a mensagem, precisa iniciar o consumo de uma fila anônima. Isso fará com que o RabbitMQ dê coo feedback o nome da fila anônima. Essa é nossa caixa postal para a resposta.

Uma vez de posse do nome da fila, basta consumir no modo exclusivo.

Agora estamos prontos para enviar uma mensagem. Mas agora usamos um cabeçalho replyto para indicar a fila de resposta. Dessa forma, o consumer será capaz de enviar a resposta para a fila e nosso publisher será capaz de receber essa resposta.

A coreografia

  1. Consumer Inicia consumo na fila padrão
  2. Publisher solicita ao RabbitMQ que crie uma fila anônima, exclusiva e autodelete. Essa será a fila de resposta.
  3. Publisher recebe o nome aleatório de fila, que já foi criada pelo RabbitMQ.
  4. Publisher inicia consumo exclusivo da fila anônima.
  5. Publisher prepara mensagem para o consumer, adicionando propriedade replyto no cabeçalho da mensagem. Essa propriedade contém o nome da fila anônima de resposta.
  6. Publisher envia mensagem para a fila padrão do consumer.
  7. Consumer recebe a mensagem
  8. Consumer realiza processamento (delegando para alguma camada de negócio)
  9. Consumer obtém o resultado.
  10. Consumer usa o cabeçalho replyto para publicar a resposta da mensagem na fila de resposta
  11. Publisher consome a mensagem
  12. Publisher cancela o consumo exclusivo, fazendo com que a fila exclusive e autodelete seja excluída.
  13. Publisher entrega response para o chamador.

O exemplo abaixo mostra isso.

Benefícios

Fácil adoção.

Não precisa revisitar os fluxos da aplicação, bastando reimplementar componentes com o protocolo.

Escalabilidade fácil de consumidores, permitindo que um consumidor falhe e mesmo assim o processo continue, sem que o publisher precise lidar com sequer 1 linha a mais de código.

Considerações

Se você disse que ficaria resiliente usando RabbitMQ, em qualquer cenário de RPC, isso não será verdade. A dependência da resposta fará com que sua aplicação aguarde esse feedback. Essa espera não pode ser infinita, e portanto dado um timeout você será afetado.

Se RPC não for uma exceção na sua implantação, muitas são as chances de você estar, na prática, forjando uma implantação de mensageria que não passa de uma fraude!

Você pediu e agora virou curso. Mensageria .NET é minha formação de especialista em RabbitMQ com .NET, onde ensino RabbitMQ do básico, cada fundamento, cada detalhe, ao avançado.

Onde você vai sair do zero absoluto e vai conseguir criar, projetar e corrigir soluções .NET com RabbitMQ.

Além de contar mais 3 outros bonus incríveis para ajudar todos que precisam de um up na carreira.

RabbitMQ Newsletter

Novidades e ofertas de conteúdo exclusivo e único no Brasil.

Hoje com orgulho somos referência quando se fala em RabbitMQ com .NET.

São quase 10 anos usando RabbitMQ em projetos .NET com C#, implantando, convencendo times e mostrando o caminho para aslcançar sos 5 benefícios.

Após centenas de pedidos, criei um curso dedicado aos profissionais .NET. 

Aqui nessa newsletter eu te entrego promoções e links especiais! Cola aqui, tem muita coisa legal!

Luiz Carlos Faria

Meu primeiro contato com RabbitMQ foi em 2013.

Eu estava sozinho na definição de uma arquitetura para a reestruturação de uma integração enquanto meu time estava ocupado com o dia-a-dia.

Naquela época eu precisava de apenas 1 ou 2 recursos que o RabbitMQ entregava.

Nas primeiras semanas e meses em produção pude perceber coisas que não estavam escritas em lugar algum, benefícios e formas de uso das quais poderiam resolver anos de frustração.

Desde então RabbitMQ tem sido meu aliado na restruturação de projetos dos mais variados.

E por mais simples que seja, ainda é possível, 10 anos depois, gerar surpresas com novas abordagens que geram novos benefícios.

7 dias

É tudo que precisa para sair do zero, à produção!

Com conforto, com segurança, e com apoio.

Desde que você já seja um desenvolvedor profissional.

Se você quer entregar mais Disponibilidade, Eficiência, Resiliência, Confiabilidade e/ou Escalabilidade, em projetos .NET, aqui é o seu lugar.

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Lives

Fique de olho nas lives

Fique de olho nas lives no meu canal do Youtube, no Canal .NET e nos Grupos do Facebook e Instagram.

Aceleradores

Existem diversas formas de viabilizar o suporte ao teu projeto. Seja com os treinamentos, consultoria, mentorias em grupo.