2014-01-10 3 views
3

Мы используем протокол mqtt для публикации сообщений через приложение java. Это приложение запускается через компьютер RPI с ограниченной скоростью обработки и баром. На mqtt мы публикуем сообщение о состоянии каждые 20 секунд. . Это сообщение опубликовано правильно в течение нескольких часов, но затем оно начинает публиковать 4 сообщения о статусе за раз и иногда дает сообщение об ошибке, которое слишком много публикуется в процессе. Было бы полезно, если бы кто-нибудь мог объяснить, почему происходит это несколько изданий, и как мы могли бы избежать этого?Как избежать слишком много сообщений об ошибке в Mqtt?

Благодаря

+0

Просьба представить более подробную информацию: Какие библиотеки Java вы используете? Можете ли вы опубликовать код, который вы используете? –

+0

Мы используем библиотеку mqttv3 paho, но извините, но не могу загрузить код причины политики безопасности – chrisgiffy

+0

Wich JVM вы используете на RPI? Новый Java8 является альфа-версией и может иметь странное поведение. –

ответ

2

вы получаете это сообщение в связи с внесением непрерывного публиковать на MQTT на условиях низкой памяти, RPi (Raspberry Pi) оборудуются с 512 Мб оперативной памяти, может вызвать эту проблему. Одним из решений является установка качества обслуживания QoS как 0 (ноль) для этой публикации. Это может быть достигнуто с использованием метода

MqttMessage message = new MqttMessage(); 
message.setQos(0); 
.... 

Установка QoS 0 не подтверждает переданное сообщение, следовательно, сохраняет память. Для получения дополнительной информации о QoS, пожалуйста, проверьте следующую ссылку http://www.eclipse.org/paho/files/mqttdoc/Cclient/qos.html

Удачи ...

+0

Небольшая память может объяснить сообщение об ошибке, но я бы установил публикацию только в QoS 0, если ваш PI подключен через надежное соединение, например, по кабелю. В противном случае вы теряете преимущества MQTT. Это полностью зависит от вашего конкретного варианта использования. –

+4

Как говорит Chritian, установка QoS на 0 не является хорошим решением здесь - вы жертвуете надежностью своих сообщений за то, что должно быть надлежащим управлением памятью в вашем приложении. Жаль, что этот ответ был принят. – knolleary

+0

Это только сообщение статуса, поэтому качество не является проблемой – chrisgiffy

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