Я включил Meter
во все болты, и теперь он отображается на веб-сервере Graphite.
public class MqttSensorDetailSpout extends BaseRichSpout {
...
private Meter tupleMeter;
public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
this.tupleMeter = context.registerMeter("meterSpout-" + this.topic);
}
public void nextTuple() {
this.tupleMeter.mark();
...
}
}
Удостоверьтесь, что Вы используете пользователя с полномочиями получить доступ к последовательным портам. Некоторые дистрибутивы помещают последовательные порты в uucp группу, поэтому удостоверьтесь, что пользователь принадлежит той группе.
Это было некоторое время, так как я сделал это. Я помню, что Вы не можете только открыть/dev/ttyS0 как файл и ввод-вывод к нему.
Я не забываю иметь ту же проблему с Sun банки IO также.
Решение, на котором я не забываю обосновываться, состояло в том, чтобы создать маленькую программу командной строки в C, который повторил stdin к последовательному порту и последовательному порту в к stdout. Затем я запустил эту программу от своего процесса Java. У меня нет кода, но существует много примеров в сети для c программ, которые пишут в последовательные порты Linux.
Мы пользовались библиотеками SerialIO для последовательной передачи данных Java и в Windows и в Linux в течение нескольких лет теперь с большими результатами (и не, я не работаю на них :-)):
http://serialio.com/products/serialport/serialport.php
Библиотеки не автоматически обнаруживают доступные последовательные порты на Linux, хотя - необходимо вручную настроить их.
Мы не изменились очень, ничто в пользовавшихся библиотеках. но удаление использования EventListener на объекте последовательного порта решило проблему.
Это на самом деле позволило, чтобы наш код работал над Linux (jre1.4.2, slackware и Солнца драйверы Comm3), где это не было проблемой на окнах - странный.
Phill