1

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

在数据生成方面,我有一个向标准输出发送的应用程序。该数据的内容是一个 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
4

3 回答 3

2

按照您自己的回答,转换器当前未配置为了解 abyte[]可以转换为具有内容类型的 String application/json

当然,即使我们将其配置为这样做,它也无法确定内容是否真的是 JSON。

于 2014-12-15T20:26:52.733 回答
1

我将以下内容添加到我的流 defn 中,它现在正在做我期望的事情。我在文档的“类型转换”部分找到了这个。

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

(换行符和回击不在我的实际代码中,但用于提高可读性。)

我也试过... --outputType=application/json...了,没有用。不完全确定为什么。

于 2014-12-15T19:58:41.047 回答
1

带有 byte[] 有效负载的 text/plain 激活 ByteArrayToStringMessageConverter。application/json 目前没有。我创建了https://jira.spring.io/browse/XD-2512来解决这个问题

于 2014-12-16T17:52:47.877 回答