将 Json 对象数组拆分为单个对象后,SpringXD 的字段值计数器不起作用

SpringXD's field-value-counter doesn't work after splitting Json Object Array into individual Object

假设我的 SpringXD 源数据包含 json 个对象(狗)的数组,我想计算每个数组元素(狗)具有的字段值(dogType)。

为此,我首先定义输入流并使用拆分器分解数组。

  1. 定义拆分器

    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}

所以拆分器工作。

  1. 接下来,在上面的流中添加一个字段值计数器

    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.类型错误

根据文档,字段值计数器仅支持 POJOTupleJSON StringjsonPath 发出一个 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