Использование устаревшей библиотеки .NET Framework WindowsAzure.ServiceBus с AMQP 1.0

Примечание

Эта статья предназначена для существующих пользователей пакета WindowsAzure.ServiceBus, которым требуется переключиться на использование AMQP в том же пакете. Хотя этот пакет продолжает принимать исправления критических ошибок, мы настоятельно рекомендуем выполнить обновление до нового пакета Azure.Messaging.ServiceBus, который доступен по состоянию на ноябрь 2020 года и по умолчанию поддерживает AMQP.

По умолчанию пакет WindowsAzure.ServiceBus взаимодействует со службой Служебной шины, используя выделенный протокол на основе SOAP, именуемый протоколом обмена сообщениями служебной шины (SBMP). В версии 2.1 добавлена поддержка AMQP 1.0, который мы рекомендуем использовать вместо протокола по умолчанию.

Чтобы использовать протокол AMQP 1.0 вместо протокола по умолчанию, необходимо выполнить явную конфигурацию в строке подключения Служебной шины или в конструкторах клиента через параметр TransportType. Помимо этих изменений, код приложения остается без изменений при использовании AMQP 1.0.

Некоторые функции интерфейса API не поддерживаются при использовании AMQP. Эти неподдерживаемые функции перечислены в разделе Различия в поведении. Кроме того, при использовании AMQP отличается значение некоторых дополнительных параметров конфигурации.

Настройка строки подключения для использования AMQP 1.0

Добавьте строку подключения с помощью ;TransportType=Amqp, чтобы указать клиенту установить подключение к Служебной шине с помощью AMQP 1.0. Например,

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

Где namespace и SAS key предоставляются на портале Azure при создании пространства имен служебной шины. Дополнительные сведения см. в статье Создание пространства имен служебной шины с помощью портала Azure.

AMQP через WebSocket

Чтобы использовать AMQP через WebSockets, задайте для TransportType в строке подключения значение AmqpWebSockets. Например: Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=AmqpWebSockets.

Сериализация сообщений

Если вы используете протокол по умолчанию, в клиентской библиотеке .NET по умолчанию используется тип DataContractSerializer для сериализации экземпляра BrokeredMessage. Это делает возможным транспорт между клиентской библиотекой и службой служебной шины. При использовании транспортного режима AMQP клиентская библиотека применяет систему типов AMQP для сериализации сообщение в брокере в сообщение AMQP. Сериализация позволяет получать и распознавать сообщение принимающим приложением, выполняемым на разных платформах. Например, это может быть приложение Java, которое использует JMS API для доступа к служебной шине.

Создавая экземпляр BrokeredMessage, вы можете передать объект .NET конструктору в качестве параметра (как текст сообщения). Для объектов, которые могут быть сопоставлены с простыми типами AMQP, текст сообщения сериализуется в типы данных AMQP. Если объект не удается непосредственно сопоставить с простым типом AMQP (когда пользовательский тип определяется приложением), объект сериализуется с использованием DataContractSerializer, а сериализованные байты отправляются в сообщении данных AMQP.

Для упрощения взаимодействия с клиентами, отличными от .NET, используйте только те типы .NET, которые могут быть сериализованы непосредственно в типы AMQP (как текст сообщения). В таблице ниже приведены эти типы, а также соответствующие им типы AMQP.

Тип объекта текста .NET Сопоставленный тип AMQP Тип раздела текста AMQP
bool Логическое Значение AMQP
byte ubyte Значение AMQP
ushort ushort Значение AMQP
uint uint Значение AMQP
ulong ulong Значение AMQP
sbyte byte Значение AMQP
short short Значение AMQP
INT INT Значение AMQP
long long Значение AMQP
FLOAT FLOAT Значение AMQP
double double Значение AMQP
Decimal decimal128 Значение AMQP
char char Значение AMQP
Дата и время TIMESTAMP Значение AMQP
Guid uuid Значение AMQP
byte[] binary Значение AMQP
строка строка Значение AMQP
System.Collections.IList list Значение AMQP. В коллекции могут содержаться только элементы, которые определены в этой таблице.
System.Array array Значение AMQP. В коллекции могут содержаться только элементы, которые определены в этой таблице.
System.Collections.IDictionary карта Значение AMQP. В коллекции могут содержаться только элементы, которые определены в этой таблице. Примечание: поддерживаются только строковые ключи.
URI Описанный тип string (см. таблицу ниже) Значение AMQP
DateTimeOffset Описанный тип long (см. таблицу ниже) Значение AMQP
TimeSpan Описанный тип long (см. таблицу ниже) Значение AMQP
Stream binary Данные AMQP (может быть несколько). Разделы данных содержат необработанные байты из объекта Stream.
Другой объект binary Данные AMQP (может быть несколько). Содержит сериализованные двоичные данные объекта, который использует DataContractSerializer или предоставленный приложением сериализатор.
Тип .NET Сопоставленный описанный тип AMQP Примечания
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

Различия в поведении

Существуют некоторые различия в поведении API WindowsAzure.ServiceBus при использовании AMQP в сравнении с протоколом по умолчанию.

  • Свойство OperationTimeout игнорируется.
  • MessageReceiver.Receive(TimeSpan.Zero) реализуется в виде MessageReceiver.Receive(TimeSpan.FromSeconds(10)).
  • Завершать сообщения с помощью маркеров блокировки могут только получатели сообщений, первоначально получившие эти сообщения.

Параметры управления протоколом AMQP

API-интерфейсы .NET предоставляют несколько параметров для управления поведением протокола AMQP.

  • MessageReceiver.PrefetchCount определяет начальные разрешения, которые применяются к ссылке. Значение по умолчанию равно 0.
  • MessagingFactorySettings.AmqpTransportSettings.MaxFrameSize определяет максимальный размер кадра AMQP, доступный во время согласования при открытии подключения. Значение по умолчанию: 65 536 байт.
  • MessagingFactorySettings.AmqpTransportSettings.BatchFlushInterval если передачу данных можно разбить на пакеты, это значение определяет максимальную задержку отправки стратегий обработки. По умолчанию наследуется отправителями и получателями. Отдельные отправители или получатели могут переопределить значение по умолчанию, составляющее 20 миллисекунд.
  • MessagingFactorySettings.AmqpTransportSettings.UseSslStreamSecurity определяет, устанавливаются ли AMQP-подключения с использованием протокола TLS. Значение по умолчанию — true.

Дальнейшие действия

Хотите узнать больше? Перейдите по следующим ссылкам: