0
以下のコードはスレッドで実行され、メッセージをキューから取り出してlogstashに送信します。私はjson(メッセージの内容である)がソケットに入れて、もう一方の端に到達することを証明するユニットテストをしました。jsonをtcp経由でlogstashに送信し、接続を開いたままにしないでください。
しかし、実際のlogstashでポイントすると、何も起きません。私は同じコンテンツを 'nc'することができ、それが表示されます。もちろん、ncは1つのメッセージを送信し終わった時点で接続を終了します。私たちが今までの接続を失った場合、再接続するには少し複雑です。
logstashの設定は非常に簡単です:
input {
tcp {
port => 9191
codec => json
}
}
output {
stdout {
codec => rubydebug
}
}
while (true) {
byte[] message = messages.take();
executor.getWithRetry(() -> {
try {
if (socket == null) {
socket = new Socket(sinkAddress, port);
}
socket.getOutputStream().write(message);
return null;
} catch (IOException e) {
socket.close();
socket = null;
throw e;
}
}).join();
}