Azure Service Bus — Implementando os Consumers (Consumidores) — Parte 3

Renicius Pagotto Fostaini
3 min readSep 3, 2020

--

Olá pessoal!

No post de hoje, implementaremos os consumidores (consumers) de mensagens da fila e do tópico utilizando o Hosted Service em nossa aplicação.

Quer saber mais sobre Hosted Service? Escrevi esse post explicando o seu funcionamento.

Caso você não tenha lido o post anterior onde implementamos o produtor de mensagens, clique aqui.

Implementando o consumer da Fila

No post passado, implementamos os publicadores de mensagens, nesse mesmo projeto, vamos criar uma pasta e dentro criaremos três classes que serão os consumidores da mensageria.

A classe ConsumerQueue é responsável por processar todas as mensagens que chegarem em uma fila e as classes ConsumerTopicSub1 e ConsumerTopicSub2 serão responsáveis por processar as mensagens que chegarem no tópico, porém cada uma ficara responsável por uma subscription do tópico, conforme configuramos no primeiro post dessa série.

Na classe ConsumerQueue que é responsável pela fila, implementaremos a conexão e o processamento das mensagens.

No construtor da nossa classe, recebemos uma connection string do Azure Service Bus que será utilizado para a conexão e consumo das mensagens da fila. A connection string está armazenada no arquivo appsettings.json

No método ProcessMessageHandler temos os seguintes pontos

  • MessageHandlerOptions: Configura o handler das mensagens em termos de manipulação de exceção, número de mensagens simultâneas a serem entregues, etc.
  • MaxConcurrentCalls: Define a quantidade de mensagens deseja processar em paralelo
  • RegisterMessageHandler: Registra um handler para processar as mensagens, que será o método ProcessMessagesAsync

No método ProcessMessagesAsync, temos uma informação importante

  • queueClient.CompleteAsync(message.SystemProperties.LockToken): Indica que o processamento da mensagem está concluído para que não seja recebida novamente e funciona apenas para mensagem no modelo PeekLock

O método ExceptionReceivedHandler é responsável por tratar as exceções oriundas da mensageria ou do processamento de mensagens.

Implementando o consumer do Tópico

Implementaremos agora os dois consumers do tópico, um para cada subscription.

Tanto a classe ConsumerTopicSub1 como a ConsumerTopicSub2, possuem a mesma implementação, diferenciando apenas na conexão, conforme é exemplificado abaixo.

Subscription 1

Subscription 2

O ponto de mudança entre as duas implementações é apenas no objeto SubscriptionClient onde passamos a connection string da mensageria, nome do tópico e o nome da subscription.

Porque temos dois consumers idênticos? É simples, em nosso caso, apenas demonstramos como se conectar nas subscription, onde cada consumer recebe uma cópia da mensagem enviada ao tópico, porém no dia a dia, teremos fluxos de código e regras de negócio diferentes em cada um.

Com a implementação dos três consumers finalizada, precisamos registra-los no startup da nossa aplicação. Para isso, adicione as seguintes linhas conforme a imagem abaixo.

E finalizamos nossa aplicação, com os publishers e os consumers plugados para enviar e consumir as mensagens.

Ficou com dúvida? Deixe nos comentários

Até mais.

Link do projeto: https://github.com/reniciuspagotto/hosted-service-demo

--

--

Renicius Pagotto Fostaini
Renicius Pagotto Fostaini

Written by Renicius Pagotto Fostaini

Solutions Architect | Speaker | Community Manager

No responses yet