Как нацелить конкретных работников с общими подписками в MQTT 5? - PullRequest
0 голосов
/ 14 мая 2019

Одной из новых функций MQTT 5 является функция общих подписок , которая обеспечивает балансировку нагрузки на стороне клиента между несколькими работниками, так что за обработку сообщений могут отвечать несколько работников, но каждое сообщение является толькокогда-либо отправляется на один сервер.

По умолчанию это работает с циклическим подходом, но мне нужен чуть более продвинутый сценарий:

То, что я хочу, - это что-то вродемаршрутизации, так что одно из свойств сообщений используется в качестве своего рода ключа маршрутизации.Т.е. я хочу, чтобы за сообщения отвечали несколько работников, но все сообщения со значением X в их свойстве ключа маршрутизации всегда должны отправляться одному и тому же работнику, и все сообщения с Y должны делать то же самое.Рабочие для X и Y могут отличаться, но все сообщения с X всегда должны идти на одно и то же.

Вопрос 1: Возможно ли это даже с MQTT 5?Если да, то какой термин мне нужно искать?Я пытался поискать в Google, но не очень-то успешно (в основном, я думаю, потому что я не знаю точно, что искать).

Теперь предположим, что это возможно: как я могузатем обрабатывать случаи, когда узлы присоединяются или уходят?Тогда я все еще хочу, чтобы только один узел отвечал, поэтому было бы здорово, если бы назначение не было статичным, но могло бы быть скорректировано динамически (или, что еще лучше, настроилось бы автоматически).Однако я должен избегать двух сообщений с X одновременно на разных серверах.

Вопрос 2: Предполагается, что это невозможно - какие альтернативы у меня есть?до MQTT 5?

1 Ответ

0 голосов
/ 14 мая 2019

Вы не на уровне протокола. В этом и заключается смысл совместной подписки - равномерно распределять входящие сообщения по всем подписчикам.

Это также противоречит парадигме pub / sub: сообщения публикуются в теме, а не в отдельном подписчике.

Если вы хотите направлять сообщения по-разному, публикуйте их в разных темах. Ничто не мешает вам переиздать сообщение на отдельную тему на основе его метаданных, как только оно будет получено клиентом при необходимости.

...