目标是读取通过网络发出的数据。
在数据生成方面,我有一个应用程序可以喷出stdout。 此数据的内容是 JSON 字符串。
以下是我正在做的事情(在Linux Mint 17上,使用BSD风格的netcat):
数据生成:
my_app_which_outputs_json | netcat localhost 9999
在 SpringXD 中:(含 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
按照您自己的答案,转换器当前未配置为了解可以将byte[]
转换为内容类型为 application/json
的字符串。
当然,即使我们将其配置为这样做,它也无法确定内容是否真的是 JSON。
我将以下内容添加到我的流 defn 中,它现在正在做我预期的事情。 我在文档的"类型转换"部分找到了这个。
stream create --name tcptest
--definition "tcp --decoder=LF --port=9999 --outputType=text/plain
| file " --deploy
(换行符和反击符不在我的实际代码中,但用于提高可读性。
我也尝试了... --outputType=application/json...
但不起作用。 不完全确定为什么。
byte[] 有效负载的文本/纯文本激活 ByteArrayToStringMessageConverter。 application/json 目前没有。我创建了 https://jira.spring.io/browse/XD-2512 来解决这个问题