2017-01-07 1 views
0

Я собираюсь прочитать все потоки в сокет TCP в сети. стандартные потоки рассылки ListenTCP на основе \ n (жестко закодированные). Как я могу написать собственный процессор ListenTCP в NiFi.Как написать custome Процессор ListenTCP в NiFi

Нужно ли расширять AbstractListenEventProcessor? Я переписываю весь процессор ListenTCP, но он не работает.

ответ

1

Существует JIRA для процессора позволяет устанавливать настраиваемое сообщение разделителя: https://issues.apache.org/jira/browse/NIFI-1985

Для реализации этого вам необходимо изменить обработчик сокетов, которые считывают сообщения. Соответствующий код здесь:

https://github.com/apache/nifi/blob/master/nifi-commons/nifi-processor-utilities/src/main/java/org/apache/nifi/processor/util/listen/handler/socket/StandardSocketChannelHandler.java#L136

И то же самое для SSL:

https://github.com/apache/nifi/blob/master/nifi-commons/nifi-processor-utilities/src/main/java/org/apache/nifi/processor/util/listen/handler/socket/StandardSocketChannelHandler.java#L136

Было бы довольно легко сделать два обработчика принять байт разделитель в конструкторе, магазин он в переменной-члене, а затем возвращает это из getDelimiter(), и тогда вам придется получить этот байт, переданный полностью от процессора до того, когда он создаст обработчик.

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

+0

Хочу целое сообщение! без какого-либо разделителя. Я переписываю весь ListenTCP и SocketChannelHandler вместе с SocketChannelDistpacher. Он работает, но имеет некоторые проблемы при закрытии соединения. –

+1

Это зависит от определения понятия «целое сообщение» ... Похоже, вы предполагаете, что клиент открывает соединение, отправляет некоторые данные, которые считаются одним сообщением, а затем закрывает соединение. Много раз клиент открывает соединение и продолжает использовать такое же соединение для отправки данных в течение длительного времени, не закрывая его, поэтому должен быть способ разбить эти данные на сообщения, в настоящее время он основан на разделителе символов, потому что то есть сколько других систем обработки журналов (rsyslog, splunk) обрабатывают его. –

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