Använda äldre WindowsAzure.ServiceBus .NET-ramverksbibliotek med AMQP 1.0
Kommentar
Den här artikeln är avsedd för befintliga användare av WindowsAzure.ServiceBus-paketet som vill växla till att använda AMQP i samma paket. Även om det här paketet fortsätter att ta emot kritiska felkorrigeringar fram till den 30 september 2026 rekommenderar vi starkt att du uppgraderar till det nya Azure.Messaging.ServiceBus-paketet i stället som är tillgängligt från och med november 2020 och som stöder AMQP som standard.
Den 30 september 2026 drar vi tillbaka Azure Service Bus SDK-biblioteken WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus och com.microsoft.azure.servicebus, som inte följer Riktlinjerna för Azure SDK. Vi kommer också att avsluta stödet för SBMP-protokollet, så du kommer inte längre att kunna använda det här protokollet efter den 30 september 2026. Migrera till de senaste Azure SDK-biblioteken, som erbjuder kritiska säkerhetsuppdateringar och förbättrade funktioner, före det datumet.
Även om de äldre biblioteken fortfarande kan användas efter den 30 september 2026 får de inte längre officiell support och uppdateringar från Microsoft. Mer information finns i meddelandet om supportavgång.
Som standard kommunicerar WindowsAzure.ServiceBus-paketet med Service Bus-tjänsten med hjälp av ett dedikerat SOAP-baserat protokoll som kallas Service Bus Messaging Protocol (SBMP). I version 2.1 har stöd för AMQP 1.0 lagts till, vilket vi rekommenderar att du använder i stället för standardprotokollet.
Om du vill använda AMQP 1.0 i stället för standardprotokollet krävs explicit konfiguration på Service Bus-anslutningssträng eller i klientkonstruktorerna via alternativet TransportType. Förutom den här ändringen förblir programkoden oförändrad när du använder AMQP 1.0.
Det finns några API-funktioner som inte stöds när du använder AMQP. Dessa funktioner som inte stöds visas i avsnittet Beteendeskillnader. Vissa av de avancerade konfigurationsinställningarna har också en annan betydelse när du använder AMQP.
Konfigurera anslutningssträng att använda AMQP 1.0
Lägg till din anslutningssträng med ;TransportType=Amqp
för att instruera klienten att ansluta till Service Bus med AMQP 1.0.
De prestandaobjekt
Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=Amqp
Var namespace
och SAS key
hämtas från Azure-portalen när du skapar ett Service Bus-namnområde. Mer information finns i Skapa ett Service Bus-namnområde med hjälp av Azure-portalen.
AMQP över WebSockets
Om du vill använda AMQP över WebSockets anger du TransportType
i anslutningssträng till AmqpWebSockets
. Exempel: Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=AmqpWebSockets
.
Meddelandeserialisering
När du använder standardprotokollet är standard serialiseringsbeteendet för .NET-klientbiblioteket att använda typen DataContractSerializer för att serialisera en BrokeredMessage-instans för transport mellan klientbiblioteket och Service Bus-tjänsten. När du använder AMQP-transportläget använder klientbiblioteket AMQP-typsystemet för serialisering av det asynkrona meddelandet till ett AMQP-meddelande. Med den här serialiseringen kan meddelandet tas emot och tolkas av ett mottagande program som eventuellt körs på en annan plattform, till exempel ett Java-program som använder JMS-API:et för att få åtkomst till Service Bus.
När du skapar en BrokeredMessage-instans kan du ange ett .NET-objekt som en parameter till konstruktorn för att fungera som brödtext i meddelandet. För objekt som kan mappas till primitiva AMQP-typer serialiseras brödtexten till AMQP-datatyper. Om objektet inte kan mappas direkt till en primitiv AMQP-typ; en anpassad typ som definierats av programmet, sedan serialiseras objektet med hjälp av DataContractSerializer och serialiserade byte skickas i ett AMQP-datameddelande.
För att underlätta samverkan med non-.NET klienter använder du endast .NET-typer som kan serialiseras direkt till AMQP-typer för meddelandets brödtext. I följande tabell beskrivs dessa typer och motsvarande mappning till AMQP-typsystemet.
Objekttyp för .NET-brödtext | Mappad AMQP-typ | AMQP-brödtextavsnittstyp |
---|---|---|
bool | boolean | AMQP-värde |
byte | ubyte | AMQP-värde |
ushort | ushort | AMQP-värde |
uint | uint | AMQP-värde |
ulong | ulong | AMQP-värde |
sbyte | byte | AMQP-värde |
short | short | AMQP-värde |
heltal | heltal | AMQP-värde |
lång | lång | AMQP-värde |
flyttal | flyttal | AMQP-värde |
dubbel | dubbel | AMQP-värde |
decimal | decimal 128 | AMQP-värde |
char | char | AMQP-värde |
Datum/tid | timestamp | AMQP-värde |
GUID | uuid | AMQP-värde |
byte[] | binary | AMQP-värde |
sträng | sträng | AMQP-värde |
System.Collections.IList | lista | AMQP-värde: objekt som finns i samlingen kan bara vara de som definieras i den här tabellen. |
System.Array | matris | AMQP-värde: objekt som finns i samlingen kan bara vara de som definieras i den här tabellen. |
System.Collections.IDictionary | map | AMQP-värde: objekt som finns i samlingen kan bara vara de som definieras i den här tabellen. Obs! Endast strängnycklar stöds. |
Uri | Beskriven sträng (se följande tabell) | AMQP-värde |
DateTimeOffset | Lång beskrivning (se följande tabell) | AMQP-värde |
TimeSpan | Beskrivs länge (se följande) | AMQP-värde |
Stream | binary | AMQP-data (kan vara flera). Avsnitten Data innehåller rådata som lästs från Stream-objektet. |
Annat objekt | binary | AMQP-data (kan vara flera). Innehåller den serialiserade binärfilen för objektet som använder DataContractSerializer eller en serialiserare som tillhandahålls av programmet. |
.NET-typ | Mappad AMQP-beskrivningstyp | OBS! |
---|---|---|
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 |
Beteendeskillnader
Det finns några små skillnader i beteendet för WindowsAzure.ServiceBus-API:et när du använder AMQP, jämfört med standardprotokollet:
- Egenskapen OperationTimeout ignoreras.
MessageReceiver.Receive(TimeSpan.Zero)
implementeras somMessageReceiver.Receive(TimeSpan.FromSeconds(10))
.- Slutförande av meddelanden med låstoken kan bara göras av de meddelandemottagare som ursprungligen tog emot meddelandena.
Kontrollera AMQP-protokollinställningar
.NET-API:erna exponerar flera inställningar för att styra beteendet för AMQP-protokollet:
- MessageReceiver.PrefetchCount: Styr den första krediten som tillämpas på en länk. Standardvärdet är 0.
- MessagingFactory Inställningar. AmqpTransport Inställningar. MaxFrameSize: Styr den maximala AMQP-ramstorleken som erbjuds under förhandlingen vid öppen anslutningstid. Standardvärdet är 65 536 byte.
- MessagingFactory Inställningar. AmqpTransport Inställningar. BatchFlushInterval: Om överföringar är batchbara avgör det här värdet den maximala fördröjningen för att skicka borttagningar. Ärvd av avsändare/mottagare som standard. Enskild avsändare/mottagare kan åsidosätta standardvärdet, som är 20 millisekunder.
- MessagingFactory Inställningar. AmqpTransport Inställningar. UseSslStreamSecurity: Styr om AMQP-anslutningar upprättas via en TLS-anslutning. Standardvärdet är sant.
Nästa steg
Vill du lära dig mer? Besök följande länkar: