Descubra filas, tópicos e assinaturas do Barramento de Serviço

Concluído

As entidades de mensagens que formam o núcleo dos recursos do sistema de mensagens agenciado no Barramento de Serviço são filas, tópicos e assinaturas e regras/ações.

Filas

As filas oferecem entrega de mensagem do tipo FIFO (primeiro a entrar, primeiro a sair) para um ou mais consumidores concorrentes. Ou seja, os receptores geralmente recebem e processam mensagens na ordem em que foram adicionados à fila. E, somente um consumidor de mensagem recebe e processa cada mensagem. Como as mensagens ficam armazenadas permanentemente na fila, os produtores (remetentes) e os consumidores (receptores) não precisam processar as mensagens simultaneamente.

Um benefício relacionado é o nivelamento de carga, que permite que produtores e consumidores enviem e recebam mensagens em taxas diferentes. Em muitos aplicativos, a carga do sistema varia ao longo do tempo. No entanto, o tempo de processamento necessário para cada unidade de trabalho é normalmente constante. A intermediação de produtores e de consumidores de mensagem com uma fila significa que o aplicativo que está consumindo só precisa ser provisionado para poder lidar com a carga média em vez da carga de pico.

A utilização de filas para intermediar entre produtores e consumidores oferece um acoplamento flexível inerente entre os componentes. Como produtores e consumidores não têm conhecimento uns dos outros, um consumidor poderá ser atualizado sem afetar o produtor.

Você cria filas usando o portal do Azure, o PowerShell, a CLI ou os modelos do Resource Manager. Em seguida, envie e receba mensagens usando clientes escritos em C#, Java, Python e JavaScript.

Modos de recepção

É possível especificar dois modos diferentes nos quais o Barramento de Serviço recebe mensagens: Recebimento e exclusão ou Bloqueio de espiada.

Recebimento e exclusão

Nesse modo, quando o Barramento de Serviço recebe a solicitação do consumidor, ele marca a mensagem como consumida e a retorna ao aplicativo do consumidor. Esse modo é o modelo mais simples. Funciona melhor em cenários em que o aplicativo pode tolerar o não processamento de uma mensagem em caso de falha. Por exemplo, considere um cenário no qual o consumidor emite a solicitação de recebimento e então falha antes de processá-la. Como o Barramento de Serviço marca a mensagem como consumida, o aplicativo começa a consumir mensagens após a reinicialização. Ele perde a mensagem consumida antes da falha.

Bloqueio de inspeção

Nesse modo, a operação de recebimento torna-se uma operação de duas etapas, possibilitando o suporte a aplicativos que não podem tolerar mensagens ausentes.

  1. Ele localiza a próxima mensagem a ser consumida, bloqueia-a para evitar que outros consumidores a recebam e a retornem para o aplicativo.

  2. Depois que o aplicativo termina de processar a mensagem, ele solicita que o serviço do Barramento de Serviço conclua o segundo estágio do processo de recebimento. Em seguida, o serviço marca a mensagem como consumida.

Se o aplicativo não puder processar a mensagem por algum motivo, ele poderá solicitar que o serviço do Barramento de Serviço abandone a mensagem. O Barramento de Serviço desbloqueia a mensagem e a disponibiliza para que ela possa ser recebida novamente pelo mesmo consumidor ou por outro consumidor concorrente. Em segundo lugar, há um tempo limite associado ao bloqueio. Se o aplicativo não conseguir processar a mensagem antes que o tempo limite de bloqueio expire, o Barramento de Serviço desbloqueia a mensagem e a disponibiliza para ser recebida novamente.

Tópicos e assinaturas

Uma fila permite o processamento de uma mensagem por um único consumidor. Diferente das filas, os tópicos e as assinaturas fornecem uma forma de comunicação de um para muitos, em um padrão de publicação e assinatura. É útil para dimensionar para um grande número de destinatários. Cada mensagem publicada é disponibilizada para cada assinatura registrada no tópico. O editor envia uma mensagem para um tópico e um ou mais assinantes recebem uma cópia da mensagem.

As assinaturas podem usar mais filtros para restringir as mensagens que desejam receber. Os editores enviam mensagens para um tópico da mesma forma que enviam mensagens para uma fila. No entanto, os consumidores não recebem mensagens diretamente do tópico. Em vez disso, os consumidores recebem mensagens de assinaturas do tópico. Uma assinatura de tópico é semelhante a uma fila virtual que recebe cópias das mensagens enviadas para o tópico. Os consumidores recebem mensagens de uma assinatura de forma idêntica à maneira como recebem mensagens de uma fila.

A funcionalidade de envio de mensagens de uma fila é diretamente mapeada para um tópico e sua funcionalidade de recebimento de mensagens é mapeada para uma assinatura. Entre outras coisas, esse recurso significa que as assinaturas dão suporte aos mesmos padrões descritos anteriormente nesta seção no que diz respeito a filas: consumidor concorrente, desacoplamento temporal, nivelamento de carga e balanceamento de carga.

Regras e ações

Em muitos cenários, as mensagens com características específicas precisam ser processadas de maneiras diferentes. Para habilitar esse processamento, você pode configurar assinaturas para localizar as mensagens com as propriedades desejáveis e, em seguida, realizar determinadas modificações nessas propriedades. Embora as assinaturas do Barramento de Serviço vejam todas as mensagens enviadas para o tópico, você só poderá copiar um subconjunto dessas mensagens para a fila de assinatura virtual. Essa filtragem é realizada usando filtros de assinatura. Tais modificações são chamadas de ações de filtro. Quando uma assinatura é criada, você pode fornecer uma expressão de filtro que opere nas propriedades da mensagem. As propriedades podem ser ambas as propriedades do sistema (por exemplo, Rótulo) e propriedades de aplicativo personalizadas (por exemplo, StoreName). A expressão de filtro SQL é opcional nesse caso. Sem uma expressão de filtro SQL, qualquer ação de filtro definida em uma assinatura é executada em todas as mensagens dessa assinatura.