Używanie starszej biblioteki platformy .NET Framework windowsAzure.ServiceBus z programem AMQP 1.0
Uwaga
Ten artykuł dotyczy istniejących użytkowników pakietu WindowsAzure.ServiceBus, którzy chcą przełączyć się na korzystanie z protokołu AMQP w ramach tego samego pakietu. Chociaż ten pakiet będzie nadal otrzymywać krytyczne poprawki błędów do 30 września 2026 r., zdecydowanie zachęcamy do uaktualnienia do nowego pakietu Azure.Messaging.ServiceBus , który jest dostępny domyślnie od listopada 2020 r. i który domyślnie obsługuje protokół AMQP.
30 września 2026 r. wycofamy biblioteki zestawu SDK usługi Azure Service Bus WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus i com.microsoft.azure.servicebus, które nie są zgodne z wytycznymi dotyczącymi zestawu Azure SDK. Zakończymy również obsługę protokołu SBMP, więc nie będzie można już używać tego protokołu po 30 września 2026 r. Przeprowadź migrację do najnowszych bibliotek zestawu Azure SDK, które oferują krytyczne aktualizacje zabezpieczeń i ulepszone możliwości przed tą datą.
Mimo że starsze biblioteki mogą być nadal używane poza 30 września 2026 r., nie będą już otrzymywać oficjalnej pomocy technicznej i aktualizacji od firmy Microsoft. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu pomocy technicznej.
Domyślnie pakiet WindowsAzure.ServiceBus komunikuje się z usługą Service Bus przy użyciu dedykowanego protokołu opartego na protokole SOAP o nazwie Service Bus Messaging Protocol (SBMP). W wersji 2.1 dodano obsługę protokołu AMQP 1.0, którego zalecamy użyć, a nie domyślnego protokołu.
Aby użyć protokołu AMQP 1.0 zamiast domyślnego protokołu, wymagana jest jawna konfiguracja w usłudze Service Bus parametry połączenia lub w konstruktorach klienta za pośrednictwem opcji TransportType. Poza tą zmianą kod aplikacji pozostaje niezmieniony podczas korzystania z protokołu AMQP 1.0.
Istnieje kilka funkcji interfejsu API, które nie są obsługiwane w przypadku korzystania z protokołu AMQP. Te nieobsługiwane funkcje są wymienione w sekcji Różnice behawioralne. Niektóre zaawansowane ustawienia konfiguracji mają również inne znaczenie w przypadku korzystania z protokołu AMQP.
Konfigurowanie parametry połączenia do używania protokołu AMQP 1.0
Dołącz parametry połączenia, ;TransportType=Amqp
aby poinstruować klienta, aby nawiązał połączenie z usługą Service Bus przy użyciu protokołu AMQP 1.0.
Przykład:
Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=Amqp
Gdzie namespace
i SAS key
są uzyskiwane z witryny Azure Portal podczas tworzenia przestrzeni nazw usługi Service Bus. Aby uzyskać więcej informacji, zobacz Tworzenie przestrzeni nazw usługi Service Bus przy użyciu witryny Azure Portal.
AMQP za pośrednictwem obiektów WebSocket
Aby użyć protokołu AMQP za pośrednictwem obiektów WebSocket, ustaw TransportType
w parametry połączenia wartość AmqpWebSockets
. Na przykład: Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=AmqpWebSockets
.
Serializacja komunikatów
W przypadku korzystania z protokołu domyślnego domyślne zachowanie serializacji biblioteki klienta platformy .NET polega na użyciu typu DataContractSerializer w celu serializacji wystąpienia BrokeredMessage na potrzeby transportu między biblioteką klienta a usługą Service Bus. W przypadku korzystania z trybu transportu AMQP biblioteka klienta używa systemu typów AMQP do serializacji komunikatu obsługiwanego przez brokera do komunikatu AMQP. Ta serializacja umożliwia odbieranie i interpretowanie komunikatu przez aplikację odbierającą, która potencjalnie działa na innej platformie, na przykład aplikacja Java korzystająca z interfejsu API JMS w celu uzyskania dostępu do usługi Service Bus.
Podczas konstruowania wystąpienia BrokeredMessage można podać obiekt .NET jako parametr konstruktora, który będzie służył jako treść komunikatu. W przypadku obiektów, które można mapować na typy pierwotne AMQP, treść jest serializowana w typach danych protokołu AMQP. Jeśli nie można bezpośrednio zamapować obiektu na typ pierwotny AMQP; oznacza to, że typ niestandardowy zdefiniowany przez aplikację, a następnie obiekt jest serializowany przy użyciu modułu DataContractSerializer, a serializowane bajty są wysyłane w komunikacie danych protokołu AMQP.
Aby ułatwić współdziałanie z klientami non-.NET, użyj tylko typów platformy .NET, które mogą być serializowane bezpośrednio w typach protokołu AMQP dla treści komunikatu. Poniższa tabela zawiera szczegółowe informacje o tych typach i odpowiadających im mapowaniu na system typów protokołu AMQP.
Typ obiektu treści platformy .NET | Mapowany typ protokołu AMQP | Typ sekcji Treści protokołu AMQP |
---|---|---|
bool | boolean | Wartość protokołu AMQP |
byte | ubyte | Wartość protokołu AMQP |
ushort | ushort | Wartość protokołu AMQP |
uint | uint | Wartość protokołu AMQP |
ulong | ulong | Wartość protokołu AMQP |
sbyte | byte | Wartość protokołu AMQP |
short | short | Wartość protokołu AMQP |
int | int | Wartość protokołu AMQP |
długi | długi | Wartość protokołu AMQP |
liczba zmiennoprzecinkowa | liczba zmiennoprzecinkowa | Wartość protokołu AMQP |
double | double | Wartość protokołu AMQP |
decimal | liczba dziesiętna128 | Wartość protokołu AMQP |
char | char | Wartość protokołu AMQP |
Data/godzina | sygnatura czasowa | Wartość protokołu AMQP |
Identyfikator GUID | uuid | Wartość protokołu AMQP |
byte[] | dane binarne | Wartość protokołu AMQP |
string | string | Wartość protokołu AMQP |
System.collections.ilist | lista | Wartość protokołu AMQP: elementy zawarte w kolekcji mogą być tylko tymi, które są zdefiniowane w tej tabeli. |
System.array | tablica | Wartość protokołu AMQP: elementy zawarte w kolekcji mogą być tylko tymi, które są zdefiniowane w tej tabeli. |
System.collections.idictionary | map | Wartość protokołu AMQP: elementy zawarte w kolekcji mogą być tylko tymi, które są zdefiniowane w tej tabeli. Uwaga: obsługiwane są tylko klucze ciągu. |
Identyfikator URI | Opisany ciąg (zobacz poniższą tabelę) | Wartość protokołu AMQP |
DateTimeOffset | Opis długi (zobacz poniższą tabelę) | Wartość protokołu AMQP |
przedział_czasu | Opis długi (zobacz następujące) | Wartość protokołu AMQP |
Stream | dane binarne | Dane protokołu AMQP (mogą być wielokrotne). Sekcje Dane zawierają nieprzetworzone bajty odczytane z obiektu stream. |
Inny obiekt | dane binarne | Dane protokołu AMQP (mogą być wielokrotne). Zawiera serializowany plik binarny obiektu, który używa klasy DataContractSerializer lub serializatora dostarczonego przez aplikację. |
Typ platformy .NET | Zamapowany typ protokołu AMQP | Uwagi |
---|---|---|
Identyfikator 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 |
przedział_czasu | <type name=”timespan” class=restricted source=”long”> <descriptor name=”com.microsoft:timespan” /></type> |
TimeSpan.Ticks |
Różnice behawioralne
Istnieją pewne niewielkie różnice w zachowaniu interfejsu API WindowsAzure.ServiceBus podczas korzystania z protokołu AMQP w porównaniu z protokołem domyślnym:
- Właściwość OperationTimeout jest ignorowana.
MessageReceiver.Receive(TimeSpan.Zero)
jest implementowany jakoMessageReceiver.Receive(TimeSpan.FromSeconds(10))
.- Kończenie komunikatów przez tokeny blokady może być wykonywane tylko przez odbiorniki komunikatów, które początkowo odebrały komunikaty.
Kontrolowanie ustawień protokołu AMQP
Interfejsy API platformy .NET udostępniają kilka ustawień w celu kontrolowania zachowania protokołu AMQP:
- MessageReceiver.PrefetchCount: kontroluje początkowe środki zastosowane do linku. Wartość domyślna to 0.
- MessagingFactory Ustawienia. AmqpTransport Ustawienia. MaxFrameSize: określa maksymalny rozmiar ramki AMQP oferowany podczas negocjacji w czasie otwierania połączenia. Wartość domyślna to 65 536 bajtów.
- MessagingFactory Ustawienia. AmqpTransport Ustawienia. BatchFlushInterval: jeśli transfery są wsadowe, ta wartość określa maksymalne opóźnienie wysyłania dyspozycji. Dziedziczone przez nadawców/odbiorników domyślnie. Pojedynczy nadawca/odbiorca może zastąpić wartość domyślną, czyli 20 milisekund.
- MessagingFactory Ustawienia. AmqpTransport Ustawienia. UseSslStreamSecurity: określa, czy połączenia AMQP są nawiązywane za pośrednictwem połączenia TLS. Wartość domyślna to true.
Następne kroki
Chcesz dowiedzieć się więcej? Odwiedź następujące linki: