O que é o Barramento de Serviço do Azure?

O Barramento de Serviço do Azure é um agente de mensagens empresarial totalmente gerenciado com filas de mensagens e tópicos de publicação/assinatura. O Barramento de Serviço é usado para separar aplicativos e serviços uns dos outros, proporcionando estes benefícios:

  • Balanceamento da carga de trabalho entre funções de trabalho concorrentes
  • Roteamento e transferência de dados e do controle, com segurança, entre limites de serviços e aplicativos
  • Coordenação do trabalho transacional que requer um alto grau de confiabilidade

Visão geral

Os dados são transferidos entre diferentes aplicativos e serviços usando mensagens. Uma mensagem é um contêiner decorado com metadados e que contém dados. Os dados podem ser qualquer tipo de informação, incluindo dados estruturados codificados com os formatos comuns, como os seguintes: JSON, XML, Apache Avro, texto sem formatação.

Alguns cenários de sistema de mensagens comuns são:

  • Mensagens. Transfira dados comerciais, como ordens de venda ou compra, diários ou movimentos de estoque.

  • Separar aplicativos. Melhore a confiabilidade e a escalabilidade de aplicativos e serviços. O produtor e o consumidor não precisam estar online nem prontamente disponíveis ao mesmo tempo. A carga é nivelada de maneira que picos de tráfego não sobrecarregam um serviço.

  • Balanceamento de carga. Permita que vários consumidores concorrentes leiam de uma fila ao mesmo tempo, cada um deles assumindo com segurança a propriedade exclusiva de mensagens específicas.

  • Tópicos e assinaturas. Habilite relações de 1:n entre publicadores e assinantes, permitindo que os assinantes selecionem mensagens específicas de um fluxo de mensagens publicado.

  • Transações. Permite que você execute diversas operações, todas elas no escopo de uma transação atômica. Por exemplo, as operações a seguir podem ser realizadas no escopo de uma transação.

    1. Obter uma mensagem de uma fila.
    2. Postar os resultados do processamento em uma ou mais filas diferentes.
    3. Mover a mensagem de entrada da fila original.

    Os resultados ficam visíveis para consumidores downstream somente após o êxito, incluindo a liquidação bem-sucedida da mensagem de entrada, permitindo a semântica de processamento único. Esse modelo de transação é uma base robusta para o padrão de transações de compensação no contexto maior da solução.

  • Sessões de mensagem. Implemente a coordenação em alta escala de fluxos de trabalho e transferências multiplexadas que exigem uma ordenação de mensagens estrita ou o adiamento de mensagens.

Se você estiver familiarizado com outros agentes de mensagens como o Apache ActiveMQ, os conceitos do Barramento de Serviço serão semelhantes aos que você conhece. Como o Barramento de Serviço é uma oferta de PaaS (plataforma como serviço), uma diferença importante é que você não precisa se preocupar com as ações a seguir. O Azure cuida dessas tarefas para você.

  • Preocupar-se com falhas de hardware
  • Manter os patches dos sistemas operacionais ou produtos
  • Criar logs e gerenciar o espaço em disco
  • Cuidar de backups
  • Fazer failover para um computador de reserva

Conceitos

Esta seção aborda conceitos básicos do Barramento de Serviço.

Filas

As mensagens são enviadas e recebidas a partir de filas. As filas armazenam mensagens até que o aplicativo de recebimento esteja disponível para recebê-las e processá-las.

Diagrama que mostra uma fila do Barramento de Serviço com um remetente e um receptor enviando e recebendo mensagens.

As mensagens em filas são ordenadas e recebem carimbo de data/hora na chegada. Depois que o agente aceitar a mensagem, ela sempre será mantida permanentemente em um armazenamento com redundância tripla, distribuído entre zonas de disponibilidade se o namespace estiver habilitado para zonas. O Barramento de Serviço mantém as mensagens na memória ou no armazenamento volátil até que o cliente as relate como aceitas.

As mensagens são entregues em modo pull, e somente quando solicitado. Diferentemente do modelo de sondagem de ocupação de algumas outras filas de nuvem, a operação de pull pode ter longa duração e ser concluída somente quando uma mensagem estiver disponível.

Observação

Para ver uma comparação entre as filas do Barramento de Serviço e as filas de Armazenamento, confira Filas de armazenamento e filas do Barramento de Serviço – comparações e contrastes.

Tópicos

Também é possível usar tópicos para enviar e receber mensagens. Embora uma fila seja frequentemente usada para comunicação ponto a ponto, os tópicos são úteis em cenários de publicação-assinatura.

Diagrama que mostra um tópico do Barramento de Serviço com um remetente e vários receptores.

Os tópicos podem ter várias assinaturas independentes, que se anexam ao tópico e, de modo geral, funcionam exatamente como filas do lado do destinatário. Um assinante de um tópico pode receber uma cópia de cada mensagem enviada para esse tópico. As assinaturas são entidades nomeadas. As assinaturas são duráveis por padrão, mas podem ser configuradas para expirarem e serem excluídas automaticamente. Por meio da API do JMS (Java Message Service), o Barramento de Serviço Premium também permite que você crie assinaturas voláteis que existem durante a conexão.

Você pode definir regras em uma assinatura. Uma regra de assinatura tem um filtro para definir uma condição para que a mensagem seja copiada na assinatura e uma ação opcional que pode modificar os metadados da mensagem. Para saber mais, confira Filtros e ações de tópico. Esse recurso é útil nos seguintes cenários:

  • Você não quer que uma assinatura receba todas as mensagens enviadas a um tópico.
  • Você quer marcar as mensagens com metadados extras quando elas passarem por uma assinatura.

Observação

Para obter mais informações sobre filas e tópicos, confira Filas, tópicos e assinaturas do Barramento de Serviço.

Namespaces

Um namespace é um contêiner para todos os tipos de componentes de mensagem (filas e tópicos). Um namespace pode ter uma ou mais filas e tópicos e geralmente serve como um contêiner de aplicativo.

Um namespace pode ser comparado a um servidor na terminologia de outros agentes, mas os conceitos não são exatamente equivalentes. Um namespace do Barramento de Serviço é a própria fatia de capacidade de um cluster grande composto por dezenas de máquinas virtuais totalmente ativas. Opcionalmente, ele abrange três zonas de disponibilidade do Azure. Assim, você obtém todos os benefícios decorrentes da disponibilidade e da robustez de executar o agente de mensagens em uma escala enorme. E você não precisa se preocupar com as complexidades subjacentes. O Barramento de Serviço é um serviço de mensagens sem servidor.

Recursos avançados

O Barramento de Serviço também possui recursos avançados que permitem resolver problemas de mensagens mais complexos. As seções a seguir descrevem esses principais recursos:

Sessões de mensagem

Para obter uma garantia de primeiro a entrar, primeiro a sair (FIFO) no processamento de mensagens em filas ou assinaturas do Barramento de Serviço, use sessões. As sessões também podem ser usadas na implementação de padrões de solicitação-resposta. O padrão solicitação-respostapermite que o aplicativo remetente envie uma solicitação e forneça uma maneira para o destinatário enviar corretamente uma resposta de volta para o aplicativo remetente. Para obter mais informações, confira Sessões de mensagem.

Encaminhamento automático

O recurso Encaminhamento automático permite encadear uma fila ou assinatura a outra fila ou outro tópico que faça parte do mesmo namespace. Quando o encaminhamento automático está habilitado, o Barramento de Serviço remove automaticamente as mensagens colocadas na primeira fila ou assinatura (origem) e as coloca na segunda fila ou no segundo tópico (destino). Para saber mais, confira Encadeamento das entidades do Barramento de Serviço com encaminhamento automático

Mensagens mortas

As filas e as assinaturas de tópico do Barramento de Serviço fornecem uma subfila secundária chamada DLQ (fila de mensagens mortas). A fila de mensagens mortas contém mensagens que não podem ser entregues a nenhum receptor ou mensagens que não podem ser processadas. Portanto, é possível remover mensagens da DLQ e inspecioná-las. Um aplicativo pode, com a ajuda de um operador, corrigir problemas e reenviar a mensagem, registrar o fato de que houve um erro e tomar uma medida corretiva. Para saber mais, confira Visão geral das filas de mensagens mortas do Barramento de Serviço.

Entrega agendada

Você pode enviar mensagens para uma fila ou um tópico para processamento atrasado. Por exemplo, para agendar um trabalho para ser disponibilizado para processamento por um sistema em um determinado momento. Para saber mais, confira Mensagens agendadas.

Adiamento de mensagens

Quando um cliente de assinatura ou fila recebe uma mensagem que está disposto a processar, mas cujo processamento não é possível devido a circunstâncias especiais no aplicativo, a entidade pode adiar a recuperação da mensagem para um ponto posterior. A mensagem permanece na fila ou assinatura, mas é reservada. Para saber mais, confira Adiamento de mensagem.

Transactions

Uma transação agrupa duas ou mais operações em um escopo de execução. O Barramento de Serviço dá suporte a operações de agrupamento em uma única entidade de mensagens (fila, tópico e assinatura) no escopo de uma transação. Para saber mais, confira Visão geral do processamento de transações do Barramento de Serviço.

Filtros e ações

Os assinantes podem definir quais mensagens desejam receber de um tópico. Essas mensagens são especificadas na forma de uma ou mais regras de assinatura nomeadas. Cada regra consiste em uma condição de filtro que seleciona mensagens específicas e como opção contém uma ação que anota a mensagem selecionada. Para cada condição de regra com correspondência, a assinatura produz uma cópia da mensagem, que pode ser anotada de forma diferente para cada regra com correspondência. Para saber mais, confira Filtros e ações de tópico.

Exclusão automática em tempo ocioso

A exclusão automática em tempo ocioso permite que você especifique um intervalo de tempo ocioso, após o qual a fila será excluída automaticamente. O intervalo é redefinido quando há tráfego na fila. A duração mínima é de 5 minutos.

Detecção de duplicidade

Se ocorrer um erro que faça com que o cliente tenha alguma dúvida sobre o resultado de uma operação de envio, a detecção de duplicidades eliminará a dúvida dessas situações, permitindo que o remetente envie novamente a mesma mensagem e que a fila ou o tópico descarte as cópias duplicadas. Para saber mais, confira Detecção de duplicatas.

Exclusão de mensagens em lote

O Barramento de Serviço do Microsoft Azure dá suporte à exclusão de mensagens em lotes. Isso é útil em cenários em que as mensagens dentro de filas ou assinaturas expiraram ou não são mais relevantes, exigindo uma limpeza. Para obter mais informações, consulte Exclusão em lote.

Segurança

O Barramento de Serviço dá suporte a protocolos de segurança, como Assinaturas de Acesso Compartilhado (SAS), Controle de Acesso Baseado em Função (RBAC) e Identidades Gerenciadas para recursos do Azure.

O Barramento de Serviço dá suporte aos protocolos padrão AMQP (Advanced Message Queuing Protocol) 1.0e HTTP/REST.

Recuperação de desastre geográfico

Quando os datacenters ou regiões do Azure passam por um tempo de inatividade, a recuperação de desastre geográfico permite que o processamento de dados continue operando em um datacenter ou região diferente.

Observação

Para obter mais informações sobre esses recursos, confira Recursos avançados do Barramento de Serviço do Azure.

Conformidade com padrões e protocolos

O protocolo de conexão primária do Barramento de Serviço é o AMQP (Advanced Message Queuing Protocol) 1.0, um padrão ISO/IEC aberto. Ele permite que os clientes escrevam aplicativos que funcionam no Barramento de Serviço e em agentes locais, como o ActiveMQ ou o RabbitMQ. O guia do protocolo AMQP fornece informações detalhadas caso você queira criar uma abstração desse tipo.

O Barramento de Serviço Premium tem total conformidade com a API JMS (Java Message Service) 2.0 do Java/Jakarta EE. E o Barramento de Serviço Standard dá suporte ao subconjunto JMS 1.1 focado em filas. O JMS é uma abstração comum para agentes de mensagens e integra-se a muitos aplicativos e estruturas, incluindo a popular estrutura Spring. Para alternar de outros agentes para o Barramento de Serviço do Azure, você só precisa recriar a topologia de filas e tópicos e alterar as dependências e a configuração do provedor do cliente. Para ver um exemplo, confira o Guia de migração do ActiveMQ.

Bibliotecas de cliente

As bibliotecas de cliente do Barramento de Serviço com suporte total estão disponíveis por meio do SDK do Azure.

O protocolo primário do Barramento de Serviço do Azure é o AMQP 1.0, que pode ser usado de qualquer cliente de protocolo em conformidade com AMQP 1.0. Vários clientes AMQP de software livre têm amostras que demonstram explicitamente a interoperabilidade do Barramento de Serviço. Examine o Guia do protocolo AMQP 1.0 para saber como usar os recursos do Barramento de Serviço diretamente com os clientes do AMQP 1.0.

Idioma Biblioteca
Java Apache Qpid Proton-J
C/C++ Azure uAMQP C, Apache Qpid Proton-C
Python Azure uAMQP para Python, Apache Qpid Proton Python
PHP Azure uAMQP for PHP
Ruby Apache Qpid Proton Ruby
Go Azure Go AMQP, Apache Qpid Proton Go
C#/F#/VB AMQP .NET Lite, Apache NMS AMQP
JavaScript/Node Rhea

Integração

O Barramento de Serviço integra-se totalmente a muitos serviços da Microsoft e do Azure, por exemplo:

Próximas etapas

Para começar a usar o sistema de mensagens do Barramento de Serviço, consulte os artigos a seguir: