Usar a biblioteca de estrutura .NET herdada do WindowsAzure.ServiceBus com AMQP 1.0

Nota

Este artigo é para usuários existentes do pacote WindowsAzure.ServiceBus que desejam alternar para usar AMQP dentro do mesmo pacote. Embora este pacote continue a receber correções de bugs críticos até 30 de setembro de 2026, recomendamos vivamente a atualização para o novo pacote Azure.Messaging.ServiceBus , que está disponível a partir de novembro de 2020 e que suporta AMQP por predefinição.

Em 30 de setembro de 2026, desativaremos as bibliotecas do SDK do Barramento de Serviço do Azure WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus e com.microsoft.azure.servicebus, que não estão em conformidade com as diretrizes do SDK do Azure. Também encerraremos o suporte ao protocolo SBMP, para que você não possa mais usar esse protocolo após 30 de setembro de 2026. Migre para as bibliotecas mais recentes do SDK do Azure, que oferecem atualizações de segurança críticas e recursos aprimorados, antes dessa data.

Embora as bibliotecas mais antigas ainda possam ser usadas após 30 de setembro de 2026, elas não receberão mais suporte e atualizações oficiais da Microsoft. Para obter mais informações, consulte o anúncio de aposentadoria de suporte.

Por padrão, o pacote WindowsAzure.ServiceBus se comunica com o serviço Service Bus usando um protocolo dedicado baseado em SOAP chamado SBMP (Service Bus Messaging Protocol). Na versão 2.1 foi adicionado suporte para AMQP 1.0 que recomendamos usar em vez do protocolo padrão.

Para usar AMQP 1.0 em vez do protocolo padrão requer configuração explícita na cadeia de conexão do Service Bus ou nos construtores cliente por meio da opção TransportType . Além dessa alteração, o código do aplicativo permanece inalterado ao usar o AMQP 1.0.

Há alguns recursos de API que não são suportados ao usar o AMQP. Esses recursos sem suporte estão listados na seção Diferenças comportamentais. Algumas das definições de configuração avançadas também têm um significado diferente ao usar o AMQP.

Configurar a cadeia de conexão para usar o AMQP 1.0

Anexe sua cadeia de conexão com para instruir o cliente a fazer sua conexão com ;TransportType=Amqp o Service Bus usando AMQP 1.0. Por exemplo,

Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=Amqp

Onde namespace e SAS key são obtidos do portal do Azure quando você cria um namespace do Service Bus. Para obter mais informações, consulte Criar um namespace do Service Bus usando o portal do Azure.

AMQP através de WebSockets

Para usar AMQP sobre WebSockets, defina TransportType na cadeia de conexão como AmqpWebSockets. Por exemplo: Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=AmqpWebSockets.

Serialização de mensagens

Ao usar o protocolo padrão, o comportamento de serialização padrão da biblioteca de cliente .NET é usar o tipo DataContractSerializer para serializar uma instância BrokeredMessage para transporte entre a biblioteca de cliente e o serviço Service Bus. Ao usar o modo de transporte AMQP, a biblioteca de cliente usa o sistema de tipo AMQP para serialização da mensagem intermediada em uma mensagem AMQP. Essa serialização permite que a mensagem seja recebida e interpretada por um aplicativo recetor que está potencialmente sendo executado em uma plataforma diferente, por exemplo, um aplicativo Java que usa a API JMS para acessar o Service Bus.

Quando você constrói uma instância BrokeredMessage , você pode fornecer um objeto .NET como um parâmetro para o construtor para servir como o corpo da mensagem. Para objetos que podem ser mapeados para tipos primitivos AMQP, o corpo é serializado em tipos de dados AMQP. Se o objeto não puder ser mapeado diretamente em um tipo primitivo AMQP; ou seja, um tipo personalizado definido pelo aplicativo, o objeto é serializado usando o DataContractSerializer e os bytes serializados são enviados em uma mensagem de dados AMQP.

Para facilitar a interoperabilidade com non-.NET clientes, use apenas tipos .NET que podem ser serializados diretamente em tipos AMQP para o corpo da mensagem. A tabela a seguir detalha esses tipos e o mapeamento correspondente para o sistema de tipos AMQP.

Tipo de objeto de corpo .NET Tipo AMQP mapeado Tipo de secção do corpo AMQP
booleano boolean Valor AMQP
byte Ubyte Valor AMQP
Ushort Ushort Valor AMQP
uint uint Valor AMQP
Ulong Ulong Valor AMQP
Sbyte byte Valor AMQP
curtas curtas Valor AMQP
número inteiro número inteiro Valor AMQP
long long Valor AMQP
flutuante flutuante Valor AMQP
duplo duplo Valor AMQP
decimal decimais128 Valor AMQP
char char Valor AMQP
DateTime carimbo de data/hora Valor AMQP
GUID uuid Valor AMQP
byte[] binário Valor AMQP
string string Valor AMQP
System.Collections.IList list Valor AMQP: os itens contidos na coleção só podem ser aqueles definidos nesta tabela.
System.Array matriz Valor AMQP: os itens contidos na coleção só podem ser aqueles definidos nesta tabela.
System.Collections.IDictionary map Valor AMQP: os itens contidos na coleção só podem ser aqueles definidos nesta tabela. Nota: apenas as teclas String são suportadas.
URI Cadeia de caracteres descrita(consulte a tabela a seguir) Valor AMQP
DateTimeOffset Descrito long(consulte a tabela seguinte) Valor AMQP
TimeSpan Descrito long(ver a seguir) Valor AMQP
Fluxo binário Dados AMQP (podem ser múltiplos). As seções Data contêm os bytes brutos lidos do objeto Stream.
Outro objeto binário Dados AMQP (podem ser múltiplos). Contém o binário serializado do objeto que usa o DataContractSerializer ou um serializador fornecido pelo aplicativo.
Tipo .NET Tipo descrito AMQP mapeado Notas
URI <type name=”uri” class=restricted source=”string”> <descriptor name=”com.microsoft:uri” /></type> Uri.AbsoluteUri
DateTimeOffset <type name=”datetime-offset” class=restricted source=”long”> <descriptor name=”com.microsoft:datetime-offset” /></type> DateTimeOffset.UtcTicks
TimeSpan <type name=”timespan” class=restricted source=”long”> <descriptor name=”com.microsoft:timespan” /></type> TimeSpan.Ticks

Diferenças comportamentais

Há algumas pequenas diferenças no comportamento da API do WindowsAzure.ServiceBus ao usar o AMQP, em comparação com o protocolo padrão:

  • A propriedade OperationTimeout é ignorada.
  • MessageReceiver.Receive(TimeSpan.Zero) é implementado como MessageReceiver.Receive(TimeSpan.FromSeconds(10)).
  • O preenchimento de mensagens por tokens de bloqueio só pode ser feito pelos destinatários das mensagens que inicialmente receberam as mensagens.

Controlar as configurações do protocolo AMQP

As APIs do .NET expõem várias configurações para controlar o comportamento do protocolo AMQP:

Próximos passos

Está pronto para saber mais? Visite os seguintes links: