2015-12-04 3 views
1

Я использую москит как мой сервер брокера. И я хочу создать кластер брокеров на основе мостового соединения.Mosquitto MQTT looping on subscribe

Когда я опубликовал, а затем подписался на тему «присутствие», я получил бесконечные повторяющиеся сообщения с трех серверов брокеров.

У меня есть три сервера, такие как: 10.80.1.1, 10.80.1.2

, и я иметь следующую конфигурацию для каждого сервера.

on server 10.80.1.1, the config as the following: 
connection myconn 
address 10.80.1.2:1881 
topiC# both 
cleansession true 
try_private false 
bridge_attempt_unsubscribe false 
notifications false 
allow_anonymous true 
start_type automatic 
clientid Bridge3 

on server 10.80.1.2, the config as the following: 
connection myconn 
address 10.80.1.1:1883 
topiC# both 
cleansession true 
try_private false 
bridge_attempt_unsubscribe false 
notifications false 
allow_anonymous true 
start_type automatic 
clientid Bridge2 

Кто может помочь мне решить эту проблему.

ответ

2

Одна точка - я предполагаю, что вы сделали опечатку в класть ваш конфигурационный здесь:

address 10.80.1.1:1883,10.80.1.2:1883 

Сепаратор для нескольких адресов является «», а не «».

Проблема в том, что вы создали цикл в своих подписках.

Когда Bridge3 получает сообщение, он публикует Bridge2. Bridge2 знает, что сообщение пришло от Bridge3, и что Bridge3 является мостом, поэтому, хотя в правиле темы говорится, что он должен отправить сообщение обратно на Bridge3, это не так. Он отправляет сообщение Bridge1.

Теперь я предполагаю, что Bridge1 оказался подключен к Bridge3 вместо Bridge2. В этом случае Bridge1 не возвращает сообщение Bridge2 по той же причине, что и выше, но отправляет сообщение Bridge3.

Bridge3 не знает, что это то же сообщение, что и оригинальное, поэтому он публикует Bridge1, и цикл продолжается.


Ответ на оригинал вопроса выше.

Обновленный ответ:

Вы должны использовать

try_private true 

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

+0

Все еще я столкнулся с проблемой с lopping после добавления try_private true –

0

опоздал на вечеринку :)

его петлю, как показано в конфигурации topiC# both,

удалить/закомментировать все моста конфигурации из любого одного сервера и перезапустить mosquitto на обоих

  on server 10.80.1.1, the config as the following: 
      connection myconn 
      address 10.80.1.2:1881 
      topiC# both 
      cleansession true 
      try_private false 
      bridge_attempt_unsubscribe false 
      notifications false 
      allow_anonymous true 
      start_type automatic 
      clientid Bridge3 

      on server 10.80.1.2, the config as the following: 
      #connection myconn 
      #address 10.80.1.1:1883 
      #topiC# both 
      #cleansession true 
      #try_private false 
      #bridge_attempt_unsubscribe false 
      #notifications false 
      #allow_anonymous true 
      #start_type automatic 
      #clientid Bridge2 
Смежные вопросы