让我们说我的SpringXD源数据包含一个json对象(狗)数组,我想要计算每个数组元素(dog)所具有的字段值(dogType)。
为此,首先我定义输入流并使用拆分器来分解数组。
定义拆分器
xd:> stream create dogstream --definition" http | splitter --expression = #jsonPath(payload,' $。[*]')|登录" --deploy
xd:&gt; http post --data&#34; [{\&#34; dog \&#34;:\&#34; poodle \&#34;},{\&#34; dog \&#34;:\&#34; chihuahua \&#34;},{\&#34; dog \&#34;:\&#34; poodle \&#34;}]&#34; < / p>
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO sink.dogstream- {dog = poodle}
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO sink.dogstream- {dog = chihuahua}
2015-10-21T10:52:31-0700 1.2.0.RELEASE INFO sink.dogstream- {dog = poodle}
所以分离器工作。
接下来,在上面的流
中添加一个字段值计数器stream create --name dogCounter --definition&#34; tap:stream:dogstream&gt; field-value-counter --fieldName = dog&#34; --deploy
现在,问题是 如果我发布更多数据(狗),SpringXD应该创建字段值计数器(我猜是懒惰创建)并为每种狗类型增加狗计数器,但我不会看到任何发生的事情。 其余端点(http://localhost:9393/metrics/field-value-counters/)不显示我创建的计数器。
有人能想到这个原因吗? SpringXD是否支持此功能?我认为这是一个合法的用例。
答案 0 :(得分:0)
两个问题:
<强> 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