Идентификатор подписки и параметры подписки — новые функции MQTT 5.0

MQTT v5 содержит множество новых функций, мы покажем эти функции в простой для понимания форме и обсудим влияние этих функций на разработчика. До сих пор мы обсуждали эти новые возможности MQTT v5. Сегодня мы продолжим обсуждение: идентификатор подписки и варианты подписки.

Идентификатор подписки

Клиент может указать идентификатор подписки при подписке. Брокер установит и сохранит отношение сопоставления между этой подпиской и идентификатором подписки при успешном создании или изменении подписки. Брокер вернет идентификатор подписки, связанный с этим пакетом PUBLISH, и пакет PUBLISH клиенту, когда потребуется переслать пакеты PUBLISH, соответствующие этой подписке, этому клиенту.

Следовательно, клиент может установить соответствие между идентификатором подписки и программой обработки сообщений для непосредственной ориентации сообщений в соответствующую программу обработки сообщений посредством идентификатора подписки при приеме пакета PUBLISH. Это намного быстрее, чем поиск программы обработки сообщений с помощью сопоставления тем.

изображение20200723152010505.png

Поскольку пакет SUBSCRIBE поддерживает множество подписок, несколько подписок могут быть связаны с одним идентификатором подписки. Такая ситуация может случиться даже при подписке отдельно. Пользователи должны осознавать, что при таком использовании может возникнуть результат, хотя такая ситуация допускается. В зависимости от фактической ситуации с подпиской клиента, пакет PUBLISH, который наконец получил клиент, может содержать несколько идентификаторов подписки, и эти идентификаторы подписки могут быть совершенно разными или одинаковыми. Ниже приведены несколько распространенных ситуаций:

  1. Клиент подписывается на тему a и указывает идентификатор подписки как 1, подписывается на тему b и указывает идентификатор подписки как 2. Из-за использования разных идентификаторов подписки сообщения темы a и b будут направлены в различные программы обработки сообщений.
  2. Клиент подписывается на тему a и указывает идентификатор подписки как 1, подписывается на тему b и указывает идентификатор подписки как 1. Из-за использования одного и того же идентификатора подписки сообщения темы a и b будут направлены в ту же программу обработки сообщений.
  3. Клиент подписывается на тему a/+ и указывает идентификатор подписки как 1, подписывается на тему a/b и указывает идентификатор подписки как 1. Пакет PUBLISH темы a/b будет содержать два идентичных идентификатора подписки, соответствующая программа обработки сообщений будет запущена дважды.
  4. Клиент подписывается на тему a/+ и указывает идентификатор подписки как 1, подписывается на тему a/b и указывает идентификатор подписки как 2. Пакет PUBLISH темы a/b будет содержать два разных идентификатора подписки, сообщение будет запускать две разные программы обработки сообщений.

изображение20200723152040226.png

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

Варианты подписки

В MQTT v5 вы можете использовать больше параметров подписки для изменения поведения сервера.

изображение20200723161859058.png

качество обслуживания

Пожалуйста, обратитесь к Качество обслуживания MQTT.

Нет местного

В MQTT v3.1.1, если вы подпишитесь на тему, опубликованную вами, вы будете получать все сообщения, которые вы опубликовали.

Однако в MQTT v5, если вы установите для этого параметра значение 1 при подписке, сервер не будет пересылать вам опубликованное вами сообщение.

Сохранить как публикацию

Этот параметр используется, чтобы указать, сохраняет ли сервер метку RETAIN при пересылке сообщений клиенту, и этот параметр не влияет на метку RETAIN в сохраненном сообщении. Поэтому, когда для параметра «Сохранить как публикацию» установлено значение 0, клиент будет напрямую различать, является ли это обычным переадресованным сообщением или сохраненным сообщением, в соответствии с отметкой RETAIN в сообщении, вместо того, чтобы судить, является ли это сообщение первым полученным после подписки. (переадресованное сообщение может быть отправлено перед сохраненным сообщением, что зависит от конкретной реализации различных брокеров).

Сохранить обработку

Этот параметр используется, чтобы указать, будет ли сервер пересылать сохраненное сообщение клиенту при установлении подписки.

  • Сохранение обработки равно 0пока клиент успешно подписывается, сервер будет отправлять сохраненное сообщение.
  • Сохранение обработки равно 1, если клиент успешно подписывается и эта подписка ранее не существовала, сервер отправляет сохраненное сообщение. Ведь иногда клиент повторно инициирует подписку только для того, чтобы изменить QoS, но это не значит, что он хочет снова получать зарезервированные сообщения.
  • Сохранение обработки равно 2даже если клиент успешно подписывается, сервер не отправляет сохраненное сообщение.

Первоначально опубликовано на

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *