Azure Service Bus — Entendendo seu funcionamento — Parte 1

Renicius Pagotto Fostaini
8 min readSep 3, 2020

Atualizado em 14/05/2022

No tópico de hoje, vamos nos aprofundar no conceito de mensageria, entender os benefícios e mostrar como o Azure Service Bus, um serviço de mensageria da Microsoft, tem facilitado essa tarefa.

O que é Mensageria?

Mensageria é uma forma de comunicação assíncrona entre aplicações na qual a comunicação é realizada por meio de mensagens. Nesse modelos temos os produtores de mensagens, os consumidores dessa mensagem e a fila (Message Broker) intermediando essa comunicação.

O que são Mensagens?

Uma mensagem é uma estrutura de dados composta por metadados como host de origem/destino, fila de destino, além de dados em formato JSON, XML ou apenas texto informando os dados a serem persistidos ou processados, como por exemplo um produto ou cliente a ser cadastrado.

Produtor de Mensagem (Publisher)

É o responsável por incluir cada nova mensagem na fila, ou seja enviar a mensagem

Consumidor de Mensagem (Consumer)

Como diz o próprio nome é o agente responsável por consumir, retirar a informação da fila

Porque utilizar Mensageria

Abaixo vamos abordar alguns dos mais importantes benefícios que a mensageria traz para nossas aplicações

Desacoplamento
As aplicações não precisam estar online ao mesmo tempo para ocorrer a comunicação, ou seja, a mensagem pode ser emitida em uma determinada hora e ser consumida em outra, com isso temos um funcionamento desacoplado onde cada módulo é independente.

Responsividade
As mensagens dão um ar um pouco mais responsivo para nossas aplicações, ou seja, em um determinado fluxo, pode haver muitas tarefas para serem realizadas e com isso não obrigamos o usuário a ficar esperando até que tudo seja feito. Um exemplo desse funcionamento é quando é feito um pedido em uma loja virtual e o processamento do pagamento demora alguns segundos ou minutos para ser efetivado.

Escalabilidade
Esse é um dos maiores benefícios que o sistema de mensageria traz para nossa aplicação pois fornece um maior desempenho. Imagine que nossa aplicação tenha uma explosão de processamento a realizar, com isso a chance da nossa aplicação sofrer uma sobrecarga é bem grande, comprometendo o desempenho geral.

Com o sistema de mensageria, cada mensagem representa uma tarefa a ser processada pelo módulo de destino e o mais interessante é que podemos escalar isso, ou seja, podemos ter uma, duas ou N instâncias realizando processando em paralelo das mensagens que chegam na fila, com isso aumentamos a capacidade de processamento do nosso software como um todo.

Um exemplo disso é no dia da Black Friday, onde os sistemas possuem picos de trabalhos gigantescos diferentemente de outros dias do ano e com a mensageria, aumentamos a capacidade de processamento.

Azure Service Bus

O Microsoft Azure Service Bus é um mediador de mensagens totalmente gerenciado, confiável e segura para transferência assíncrona de dados.

No azure Service Bus, podemos usar filas e tópicos para envio e recebimento de mensagens, além de trabalhar com o conceito FIFO.

FIFO (first-in, first-out)

Conforme documentação oficial, o Azure Service Bus utiliza o conceito de FIFO (first-in, first-out), ou seja, a primeira mensagem que chegar é a primeira a sair.

Fila

Seguindo a proposta de uma fila comum mesmo, conforme nossas mensagens chegam no Service Bus, serão enfileiradas e enviadas. Abaixo você tem uma imagem demonstrando esse passo:

Tópico

O funcionamento do tópico se assemelha com a fila, porém uma diferença é que um tópico, pode ter assinaturas independentes, ou seja, um assinante de um tópico pode receber uma cópia de cada mensagem enviada para esse tópico.

Para entender melhor, cada tópico é responsável por determinado assunto, ou seja, o tópico A pode ter o nome “Produto” e receber apenas mensagens referentes a produtos enquanto o tópico B pode receber apenas mensagens de clientes e assim por diantes. Com isso as aplicações podem se inscrever para receber uma mensagem conforme o seu propósito.

A imagem abaixo exemplifica esse passo:

Processamento de Mensagem

Existem duas maneiras pelas quais um destinatário receberá uma mensagem: Peek and Lock e Receive and Delete

Peek and Lock

Nesse modo, a mensagem é bloqueada pelo destinatário por uma duração especificada pela propriedade “Duração do Bloqueio” da Fila ou, em outras palavras, nesse modo, uma mensagem é ocultada de outros receptores por um período especificado pela Duração do Bloqueio. O destinatário processaria a mensagem e, depois disso, o destinatário marcaria a mensagem como “Concluída”, que basicamente exclui a mensagem da fila. Se a “Duração do bloqueio” expirar, outros receptores poderão buscar esta mensagem

Receive and Delete

Nesse modo, uma vez que a mensagem é recebida por um destinatário, ela será excluída da fila automaticamente. Se um receptor falhar ao processar essa mensagem, a mensagem será perdida para sempre. Portanto, use este modo com cuidado.

Criando o Azure Service Bus Queue

Acesse portal do Azure e realize o login e na barra de pesquisa do painel digite Azure Service Bus e em seguida clique na opção Service Bus, conforme indica a imagem abaixo

Você será redirecionado para uma página que lista todos os serviços de mensageria, porém como não possuimos nenhum, vamos ter que criar um serviço e para isso clique em Add

Na próxima tela, vamos de fato, informar todas as informações para criação do serviço, conforme imagem

Nessa página, devemos obrigatóriamente informar a subscription e o resource group (caso não possua um resource group, clique na opção logo abaixo do dropdown para criar um)

Além dessa informações, devemos infomar algumas outras:

  • Namespace name: Nome a ser dado para a mensageria
  • Location: É a localização onde nossos arquivos ficarão hospedados e você pode escolher o lugar de sua preferência (aconselho a utilizar o servidor do Brasil para evitar a latência)
  • Pricing tier: É a camada de preço do serviço (Basic, Standard, Premium). No caso, vamos escolher a camada Standard que possui suporte tanto a fila como tópico.

Após preencher as informações, podemos clicar em Review + create para prosseguir com a criação

O Azure validará todas as informações fornecidas no passo anterior, informando seu resultado e com isso podemos clicar em Create para finalmente criar noss serviço.

Será necessário aguardar alguns segundos ou até minutos para que o Azure finalize o processo de criação.

Após o término do processo, clique em Go to resource para acessar o serviço

Para criação de uma fila simples clique em + Queue, onde será redirecionado para uma janela onde forneceremos as informações para a criação da fila

Nessa etapa, devemos informar as seguintes informações:

  • Name: Nome a ser dado para a fila do Azure Service Bus
  • Max queue size: Tamanho máximo da fila
  • Message time to live: Quantidade de dias que a mensagem ficará na fila aguardando para ser processada. Se a mensagem não for processada, ela pode ser removida ou enviada para uma fila de mensagens não processadas (dead letter)
  • Lock Duration: Tempo de duração que uma mensagem ficará alocada para um consumidor processar, uma vez recebida, nenhum outro consumidor pode recebe-la
  • Enable duplicate detection: Configura a fila (queue) para manter um histórico de todas as mensagens por um período configurável. Durante esse intervalo, sua fila não aceitará nenhuma mensagem duplicada. A ativação dessa propriedade garante a entrega exata apenas uma vez, durante um período de tempo definido pelo usuário.
  • Enable dead lettering on message expiration: Indica se as mensagens na fila devem ser movidas para a sub-fila de mensagens não entregues quando expirarem. Se essa propriedade não estiver configurada, as mensagens serão removidas da fila assim que expirarem.
  • Enable sessions: Com as sessões ativadas, uma fila pode garantir a entrega de mensagens no modo first-in-first-out
  • Enable partitioning: Indica se a fila deve ser particionada entre vários message broker (Azure Service Bus).

Para o nosso cenário, vou manter todas as informações que vem default, porém sinta-se a vontade de configurar do seu jeito.

Após fornecer todas as informações, clique em Create e aguarde alguns segundos até o processo de criação concluir

Aqui finalizamos a criação da fila, agora ela está pronta para ser utilizada, porém antes de seguirmos para o código, vamos entender como que funciona a criação de um tópico.

Azure Service Bus Topic

Voltando na tela principal do Service Bus, clique na opção + Topic, onde será redirecionado para uma janela onde forneceremos as informações para a criação do tópico.

As informações da tela abaixo foram explicadas na criação da fila, caso tenha dúvidas, vale a pena conferir novamente.

Com as informações preenchidas clique em Create, para prosseguir com a criação do nosso tópico

Finalizado a criação, agora possuímos tanto um tópico como uma fila, conforme vemos na imagem abaixo

Vamos agora configurar as subscription e para isso clique no nome do tópico e na próxima tela clique em + Subscription

Precisamos fornecer algumas informações para a criação da nossa subscription

As informações dessa tela, foram explicadas quando criamos nosso Service Bus Queue, porém duas informação importante nova esta presente nessa tela

  • Max delivery count: Indica o número máximo de vezes que uma mensagem pode ser entregue. Depois que essa contagem exceder, a mensagem será removida da fila
  • Forward messages to queue/topic: Encaminhar automaticamente mensagens para uma fila ou tópico no mesmo namespace

Prosseguindo nossa configuração, clique no Create para finalizar a criação da nossa subscription e agora refaça novamente todo o processo novamente para a criação da nossa segunda subscription.

Com toda a configuração da nossa mensageria finalizada, temos uma fila (queue) simples com o nome “product” e um tópico (topic) com o nome “product-topic” com duas subscription “product-sub1” e “product-sub2”.

No próximo post vamos demonstrar a implementação dos consumers e publishers em C#

Ficou com dúvida? Deixe nos comentários

[Parte 2] — https://medium.com/@renicius.pagotto/azure-service-bus-implementando-o-publisher-publicador-parte-2-b1e4bbfdb8f0

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Renicius Pagotto Fostaini
Renicius Pagotto Fostaini

Written by Renicius Pagotto Fostaini

Solutions Architect | Speaker | Community Manager

Responses (2)

Write a response

comunicação assíncrona

Comunicação assíncrona é aquela que não acontece em tempo real. O emissor envia a mensagem e o receptor pode acessá-la e respondê-la quando desejar. O modelo é mais conveniente para quem recebe, porém requer objetividade, já que não é possível tirar dúvidas no mesmo momento. Um exemplo é o email.

Excelente, obrigado por compartilhar.