O que é o Azure Service Bus?
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 Service Bus é usado para dissociar aplicativos e serviços uns dos outros, fornecendo os seguintes benefícios:
- Trabalho de balanceamento de carga entre trabalhadores concorrentes
- Roteamento e transferência de dados e controle com segurança entre os limites de serviço e aplicativo
- Coordenação do trabalho transacional que requer um alto grau de confiabilidade
Descrição geral
Os dados são transferidos entre diferentes aplicações e serviços utilizando mensagens. Uma mensagem é um contêiner decorado com metadados e 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, Plain Text.
Alguns cenários comuns de mensagens são:
Mensagens. Transfira dados comerciais, como ordens de compra ou de venda, diários ou movimentos de inventário.
Desacoplar aplicações. Melhore a confiabilidade e a escalabilidade de aplicativos e serviços. Produtor e consumidor não precisam estar on-line ou prontamente disponíveis ao mesmo tempo. A carga é nivelada de tal forma que os 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 obtendo com segurança a propriedade exclusiva de mensagens específicas.
Tópicos e subscrições. Habilite relações 1:n entre editores e assinantes, permitindo que os assinantes selecionem mensagens específicas de um fluxo de mensagens publicado.
transações. Permite fazer várias operações, todas no âmbito de uma transação atómica. Por exemplo, as seguintes operações podem ser feitas no escopo de uma transação.
- Obtenha uma mensagem de uma fila.
- Postar resultados de processamento para uma ou mais filas diferentes.
- Mova a mensagem de entrada da fila original.
Os resultados tornam-se visíveis para os consumidores a jusante apenas após o sucesso, incluindo a liquidação bem-sucedida da mensagem de entrada, permitindo o processamento semântico de uma única vez. Este modelo de transação é uma base robusta para o padrão de transações de compensação no contexto de solução maior.
Sessões de mensagens. Implemente a coordenação em alta escala de fluxos de trabalho e transferências multiplexadas que exigem ordenação ou adiamento rigoroso de mensagens.
Se você estiver familiarizado com outros agentes de mensagens como o Apache ActiveMQ, os conceitos do Service Bus são semelhantes aos que você conhece. Como o Service Bus é uma oferta de plataforma como serviço (PaaS), uma diferença fundamental é que você não precisa se preocupar com as seguintes ações. O Azure cuida dessas tarefas para você.
- Preocupando-se com falhas de hardware
- Manter os sistemas operativos ou os produtos corrigidos
- Colocação de logs e gerenciamento de espaço em disco
- Tratamento de backups
- Failover para uma máquina de reserva
Conceitos
Esta seção discute os conceitos básicos do Service Bus.
Queues
As mensagens são enviadas e recebidas de filas. As filas armazenam mensagens até que o aplicativo recetor esteja disponível para recebê-las e processá-las.
As mensagens em filas são ordenadas e marcadas com a hora na chegada. Depois que o broker aceita a mensagem, ela é sempre mantida de forma durável em armazenamento com redundância tripla, distribuída por zonas de disponibilidade se o namespace estiver habilitado para zona. O Service Bus mantém as mensagens na memória ou no armazenamento volátil até que o cliente as informe como aceitas.
As mensagens são entregues no modo pull , entregando mensagens apenas quando solicitado. Ao contrário do modelo de sondagem ocupada de algumas outras filas na nuvem, a operação de pull pode ser de longa duração e só ser concluída quando uma mensagem estiver disponível.
Nota
Para obter uma comparação das filas do Service Bus com as filas de armazenamento, consulte Filas de armazenamento e filas do Service Bus - comparadas e contrastadas.
Tópicos
Também pode utilizar 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.
Os tópicos podem ter várias assinaturas independentes, que se anexam ao tópico e, de outra forma, funcionam exatamente como filas do lado do recetor. Um subscritor de um tópico pode receber uma cópia de cada mensagem enviada para esse tópico. As subscrições são entidades nomeadas. As assinaturas são duráveis por padrão, mas podem ser configuradas para expirar e, em seguida, ser excluídas automaticamente. Por meio da API do Java Message Service (JMS), o Service Bus Premium também permite criar 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 para a assinatura e uma ação opcional que pode modificar os metadados da mensagem. Para obter mais informações, consulte Filtros e ações de tópicos. Esse recurso é útil nos seguintes cenários:
- Você não quer que uma assinatura receba todas as mensagens enviadas para um tópico.
- Você deseja marcar mensagens com metadados extras quando elas passam por uma assinatura.
Nota
Para obter mais informações sobre filas e tópicos, consulte Filas, tópicos e assinaturas do Barramento de Serviço.
Espaços de nomes
Um namespace é um contêiner para todos os componentes de mensagens (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 brokers, mas os conceitos não são diretamente equivalentes. Um namespace do Service Bus é sua própria fatia de capacidade de um grande cluster composto por dezenas de máquinas virtuais totalmente ativas. Opcionalmente, abrange três zonas de disponibilidade do Azure. Assim, você obtém todos os benefícios de disponibilidade e robustez de executar o agente de mensagens em grande escala. E você não precisa se preocupar com as complexidades subjacentes. O Service Bus é uma mensagem sem servidor.
Funcionalidades avançadas
O Service Bus também tem funcionalidades avançadas que permitem resolver problemas de mensagens mais complexos. As seguintes secções descrevem estas principais funcionalidades:
Sessões de mensagens
Para obter uma garantia FIFO (first-in, first-out) no processamento de mensagens em filas ou assinaturas do Service Bus, 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-resposta permite que o aplicativo remetente envie uma solicitação e fornece uma maneira para o destinatário enviar corretamente uma resposta de volta para o aplicativo remetente. Para obter mais informações, consulte Sessões de mensagens.
Reencaminhamento automático
O recurso de encaminhamento automático permite encadear uma fila ou assinatura para outra fila ou tópico que faça parte do mesmo namespace. Quando o reencaminhamento automático estiver ativado, o Service Bus remove automaticamente as mensagens que são colocadas na primeira fila ou subscrição (origem) e coloca-as na segunda fila ou tópico (destino). Para obter mais informações, consulte Encadeamento de entidades do Service Bus com encaminhamento automático
Mensagens não entregues
As filas do Barramento de Serviço e as assinaturas de tópicos fornecem uma subfila secundária, chamada de fila de mensagens mortas (DLQ). A fila de letras mortas contém mensagens que não podem ser entregues a nenhum destinatário ou mensagens que não podem ser processadas. Pode 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 ação corretiva. Para obter mais informações, consulte Visão geral das filas de mensagens mortas do Service Bus.
Entrega agendada
Você pode enviar mensagens para uma fila ou tópico para processamento atrasado. Por exemplo, para agendar um trabalho para ficar disponível para processamento por um sistema em um determinado momento. Para obter mais informações, consulte Mensagens agendadas.
Diferimento de mensagens
Quando um cliente de fila ou assinatura recebe uma mensagem que está disposta a processar, mas para a qual o processamento não é possível atualmente devido a circunstâncias especiais dentro do aplicativo, a entidade pode adiar a recuperação da mensagem para um ponto posterior. A mensagem permanece na fila ou na assinatura, mas é deixada de lado. Para obter mais informações, consulte Adiamento de mensagens.
Transações
Uma transação agrupa duas ou mais operações num âmbito de execução. O Service Bus suporta operações de agrupamento em relação a uma entidade de mensagens única (fila, tópico, subscrição) no âmbito de uma transação. Para obter mais informações, consulte Visão geral do processamento de transações do Service Bus.
Filtros e ações
Os subscritores podem definir as mensagens que pretendem receber de um tópico. Estas mensagens são especificadas na forma de uma ou mais regras de subscrição denominadas. Cada regra consiste em uma condição de filtro que seleciona mensagens específicas e , opcionalmente , contém uma ação que anota a mensagem selecionada. Para cada condição de regra correspondente, a assinatura produz uma cópia da mensagem, que pode ser anotada de forma diferente para cada regra correspondente. Para obter mais informações, consulte Filtros e ações de tópicos.
Eliminação automática em inatividade
A eliminação automática em inatividade permite especificar um intervalo de inatividade após o qual a fila é eliminada automaticamente. O intervalo é redefinido quando há tráfego na fila. A duração mínima é 5 minutos.
Deteção de duplicados
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 deteção de duplicados elimina a dúvida dessas situações, permitindo que o remetente reenvie a mesma mensagem, e a fila ou tópico descarta quaisquer cópias duplicadas. Para obter mais informações, consulte Deteção de duplicatas.
Exclusão em lote de mensagens
O Barramento de Serviço do 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 Service Bus dá suporte a protocolos de segurança, como SAS (Assinaturas de Acesso Compartilhado), RBAC (Controle de Acesso Baseado em Função) e identidades gerenciadas para recursos do Azure.
O Service Bus suporta protocolos padrão AMQP (Advanced Message Queuing Protocol) 1.0 e HTTP/REST .
Recuperação após desastre geográfica
Quando as regiões ou centros de dados do Azure sofrem um período de inatividade, a recuperação após desastre geográfica permite o processamento de dados para continuar a operar numa região ou centro de dados diferente.
Nota
Para obter mais informações sobre esses recursos, consulte Recursos avançados do Barramento de Serviço do Azure.
Cumprimento de normas e protocolos
O principal protocolo de conexão para o Service Bus é o Advanced Messaging Queueing Protocol (AMQP) 1.0, um padrão ISO/IEC aberto. Ele permite que os clientes escrevam aplicativos que funcionam em Service Bus e agentes locais, como ActiveMQ ou RabbitMQ. O guia do protocolo AMQP fornece informações detalhadas caso você queira construir tal abstração.
O Service Bus Premium é totalmente compatível com a API Java/Jakarta EE Java Message Service (JMS) 2.0 . Além disso, o Service Bus Standard suporta o subconjunto JMS 1.1 focado em filas. JMS é uma abstração comum para agentes de mensagens e integra-se com muitos aplicativos e estruturas, incluindo o popular framework Spring. Para alternar de outros brokers 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 cliente. Para obter um exemplo, consulte o guia de migração do ActiveMQ.
Bibliotecas de cliente
As bibliotecas de cliente do Service Bus totalmente suportadas estão disponíveis através do SDK do Azure.
- Barramento de Serviço do Azure para .NET
- As estruturas de terceiros que fornecem abstrações de nível superior criadas sobre o SDK incluem NServiceBus e MassTransit.
- Bibliotecas do Barramento de Serviço do Azure para Java
- Provedor do Barramento de Serviço do Azure para Java JMS 2.0
- Módulos do Barramento de Serviço do Azure para JavaScript e TypeScript
- Bibliotecas do Barramento de Serviço do Azure para Python
O protocolo principal do Barramento de Serviço do Azure é AMQP 1.0 e pode ser usado de qualquer cliente de protocolo compatível com AMQP 1.0. Vários clientes AMQP de código aberto têm exemplos que demonstram explicitamente a interoperabilidade do Service Bus. Consulte o guia de protocolo AMQP 1.0 para entender como usar os recursos do Service Bus diretamente com clientes 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 para PHP |
Ruby | Apache Qpid Proton Ruby |
Go | Azure Go AMQP, Apache Qpid Proton Go |
C#/F#/VB | AMQP .NET Lite, Apache NMS AMQP |
JavaScript/Nó | Reia |
Integração
O Service Bus integra-se totalmente com muitos serviços da Microsoft e do Azure, por exemplo:
Próximos passos
Para começar a utilizar as mensagens do Service Bus, consulte os seguintes artigos:
- Filas, tópicos e subscrições do Service Bus
- Inícios rápidos: .NET, Java, JMS ou NServiceBus
- Preços do Service Bus.
- Mensagens Premium.