Spring XD:"tcp"源输出字节数组而不是字符串?如何输出常规文本?



目标是读取通过网络发出的数据。

在数据生成方面,我有一个应用程序可以喷出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 来解决这个问题

最新更新