将 Json 对象数组拆分为单个对象后,SpringXD 的字段值计数器不起作用
SpringXD's field-value-counter doesn't work after splitting Json Object Array into individual Object
假设我的 SpringXD 源数据包含 json 个对象(狗)的数组,我想计算每个数组元素(狗)具有的字段值(dogType)。
为此,我首先定义输入流并使用拆分器分解数组。
定义拆分器
xd:>stream create dogstream --definition "http | splitter --expression=#jsonPath(payload,'$.[*]') | log" --deploy
xd:>http post --data "[{\"dog\": \"poodle\"}, {\"dog\": \"chihuahua\"} , {\"dog\":\"poodle\"}]"
2015-10-21T10:52:31-0700 1.2.0.RELEASE 信息 sink.dogstream- {dog=poodle}
2015-10-21T10:52:31-0700 1.2.0.RELEASE 信息 sink.dogstream- {dog=chihuahua}
2015-10-21T10:52:31-0700 1.2.0.RELEASE 信息 sink.dogstream- {dog=poodle}
所以拆分器工作。
接下来,在上面的流中添加一个字段值计数器
stream create --name dogCounter --definition "tap:stream:dogstream > field-value-counter --fieldName=dog" --deploy
现在,问题来了
如果我 post 更多数据(狗),SpringXD 应该创建字段值计数器(我猜是惰性创建)并为每种狗类型增加狗计数器,但我没有看到任何事情发生。
其余端点 (http://localhost:9393/metrics/field-value-counters/) 不显示我创建的计数器。
谁能想出原因吗? SpringXD 支持吗?我认为这是一个合法的用例。
两个问题:
1.类型错误
根据文档,字段值计数器仅支持 POJO
、Tuple
或 JSON String
。
jsonPath
发出一个 LinkedHashMap
;所以我们需要将其转换回 JSON...
xd:>stream create dogstream --definition "http | splitter --expression=#jsonPath(payload,'$.[*]') --outputType=application/json | log" --deploy
在这里,我使用了 outputType
属性。
2。错误的点击点
您点击了错误的流部分;默认情况下,点击应用于第一个 |
;你需要在分离器之后点击...
xd:>stream create --name dogCounter --definition "tap:stream:dogstream.splitter > field-value-counter --fieldName=dog" --deploy
假设我的 SpringXD 源数据包含 json 个对象(狗)的数组,我想计算每个数组元素(狗)具有的字段值(dogType)。
为此,我首先定义输入流并使用拆分器分解数组。
定义拆分器
xd:>stream create dogstream --definition "http | splitter --expression=#jsonPath(payload,'$.[*]') | log" --deploy
xd:>http post --data "[{\"dog\": \"poodle\"}, {\"dog\": \"chihuahua\"} , {\"dog\":\"poodle\"}]"
2015-10-21T10:52:31-0700 1.2.0.RELEASE 信息 sink.dogstream- {dog=poodle}
2015-10-21T10:52:31-0700 1.2.0.RELEASE 信息 sink.dogstream- {dog=chihuahua}
2015-10-21T10:52:31-0700 1.2.0.RELEASE 信息 sink.dogstream- {dog=poodle}
所以拆分器工作。
接下来,在上面的流中添加一个字段值计数器
stream create --name dogCounter --definition "tap:stream:dogstream > field-value-counter --fieldName=dog" --deploy
现在,问题来了 如果我 post 更多数据(狗),SpringXD 应该创建字段值计数器(我猜是惰性创建)并为每种狗类型增加狗计数器,但我没有看到任何事情发生。 其余端点 (http://localhost:9393/metrics/field-value-counters/) 不显示我创建的计数器。
谁能想出原因吗? SpringXD 支持吗?我认为这是一个合法的用例。
两个问题:
1.类型错误
根据文档,字段值计数器仅支持 POJO
、Tuple
或 JSON String
。
jsonPath
发出一个 LinkedHashMap
;所以我们需要将其转换回 JSON...
xd:>stream create dogstream --definition "http | splitter --expression=#jsonPath(payload,'$.[*]') --outputType=application/json | log" --deploy
在这里,我使用了 outputType
属性。
2。错误的点击点
您点击了错误的流部分;默认情况下,点击应用于第一个 |
;你需要在分离器之后点击...
xd:>stream create --name dogCounter --definition "tap:stream:dogstream.splitter > field-value-counter --fieldName=dog" --deploy