2016-06-03 9 views
0

У меня есть два брокера mosquitto, установленных на PC1 (mosquitto v1.4.8) и PC2 (RabbitMQ v3.6.2 с адаптером MQTT).Как предотвратить шлейф публиковать, когда москит моста с RabbitMQ MQTT?

Bridging инициирован на ПК1, как показано ниже

sensor/room1/ <-> office/room1/ 

Но я заметил, что всегда есть дубликат сообщение публикуется назад, когда мост активен, значит, все мое заявление (на ПК1), который присоединяется к той же теме будет получает одно и то же сообщение дважды. Какая настройка я сделал здесь неправильно?

PC1 mosquitto.conf

connection bridge-pc1-to-pc2 
address pc2-address.com 
topic room1/# both 2 sensor/ office/ 

bridge_protocol_version mqttv311 
notifications true 
cleansession true 
try_private false 

Чтобы проверить проблему замыкания на себя, я PC1 подписался на тему sensor/#

mosquitto_sub -t sensor/# -v -d 

Затем на ПК1 я публикую тестовое сообщение

mosquitto_pub -t sensor/room1/temperature -m '{"value":27.3, "timestamp":"2016-06-03 14:02:38"}' 

Брокер в облаке (PC2) получил сообщение правильно (полученное сообщение только один раз)

Client mosqsub/3121-Dennis-iMa sending CONNECT 
Client mosqsub/3121-Dennis-iMa received CONNACK 
Client mosqsub/3121-Dennis-iMa sending SUBSCRIBE (Mid: 1, Topic: office/#, QoS: 0) 
Client mosqsub/3121-Dennis-iMa received SUBACK 
Subscribed (mid: 1): 0 
Client mosqsub/3121-Dennis-iMa received PUBLISH (d0, q0, r0, m0, 'office/room1/temperature', ... (14 bytes)) 
office/room1/temperature {"value":27.3, "timestamp":"2016-06-03 14:02:38"} 

Но PC1 получил одно и то же сообщение дважды! Ниже приведен вывод Pi

Received CONNACK 
Received SUBACK 
Subscribed (mid: 1): 0 
Received PUBLISH (d0, q0, r0, m0, 'sensor/room1/temperature', ... (14 bytes)) 
sensor/room1/temperature {"value":27.3, "timestamp":"2016-06-03 14:02:38"} 
Received PUBLISH (d0, q0, r0, m0, 'sensor/room1/temperature', ... (14 bytes)) 
sensor/room1/temperature {"value":27.3, "timestamp":"2016-06-03 14:02:38"} 

Почему есть сообщение о петлевом замыкании и как его решить?

Update 3 июня 2016
Это не тот же самый вопрос с этим question, поскольку она не предполагает горизонтальное масштабирование (1-к-многим брокерам)

+0

Возможный дубликат [mqtt mosquitto bridge horizontal scaling] (http://stackoverflow.com/questions/36283197/mqtt-mosquitt-bridge-horizontal-scaling) – hardillb

+0

@hardillb Это не тот же вопрос с этим вопросом, как он не связан с горизонтальным масштабированием (1-ко-многим брокерам) – Dennis

ответ

1

Изменение try_private false к try_private true. Это именно то, для чего оно предназначено. Если кролик не поддерживает эту функцию (она в настоящее время не входит в спецификацию, но широко используется), вам не повезло.

+0

Я пробовал, он работает, если оба брокера являются москитами, но это не работает для комаров + RabbitMQ – Dennis

0

RabbitMQ не поддерживает try_private и ничего не знает о мосту. Таким образом, сообщения, опубликованные в office/* в RabbitMQ, будут отправлены обратно подписанному москиту без учета любых флагов private. Чтобы удалить циклы, вы можете использовать разные имена тем для входящих и исходящих подключений или использовать два сервера mosquitto.

+0

Изменение моей структуры темы будет очень много работы. Я изначально выбираю RabbitMQ, потому что свободен и поддерживает облачную кластеризацию. Знаете ли вы какой-либо другой бренд, который может сделать то же самое? – Dennis

 Смежные вопросы

  • Нет связанных вопросов^_^