1

目標は、ネットワーク経由で送信されたデータを読み取ることです。

データ生成側では、stdout に吐き出すアプリがあります。このデータの内容は JSON 文字列です。

これが私がやっていることです(Linux Mint 17で、BSDフレーバーのnetcatを使用しています):

データ生成:

my_app_which_outputs_json | netcat localhost 9999

SpringXD の場合: (with xd-singlenode)

xd:>stream create --name tcptest --definition "tcp --decoder=LF --port=9999 | file " --deploy
Created and deployed new stream 'tcptest'

出力:

/tmp/xd/output$ cat tcptest.out 
82,117,110, ...  (etc, lots more bytes)

これはユーザー エラーであると確信していますが、正しくするために何を変更すればよいかわかりません。

これを行うと、期待どおりに機能することに注意してください。

my_app_which_outputs_json > /tmp/somefile.txt
...
xd:>stream create --name filetest --definition "tail --name=/tmp/somefile.txt | file" --deploy
4

3 に答える 3

2

あなた自身の答えに続いて、コンバーターは現在、byte[]a を content type の String に変換できることを理解するように構成されていませんapplication/json

もちろん、そのように構成したとしても、コンテンツが本当に JSON であるかどうかを判断することはできません。

于 2014-12-15T20:26:52.733 に答える
1

ストリーム定義に以下を追加したところ、期待どおりの動作になりました。これは、ドキュメントの「型変換」セクションで見つけました。

stream create --name tcptest \
    --definition "tcp --decoder=LF --port=9999 --outputType=text/plain \
    | file " --deploy

(改行と逆行は実際のコードにはありませんが、読みやすくするために使用されています。)

... --outputType=application/json...うまくいかないものも試しました。理由は完全にはわかりません。

于 2014-12-15T19:58:41.047 に答える