Использование устаревшей библиотеки .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.
Дальнейшие действия
Хотите узнать больше? Перейдите по следующим ссылкам: