Счетчик значения поля SpringXD не работает после разделения массива объектов Json на отдельные объекты

Допустим, мои исходные данные SpringXD содержат массив объектов json (собак), и я хочу подсчитать значение поля (dogType), которое имеет каждый элемент массива (собака).

Для этого сначала я определяю входной поток и использую разделитель для разложения массива.

  1. Определить разделитель

    xd:>stream create dogstream --definition "http | splitter --expression=#jsonPath(payload,'$.[*]') | log" --deploy

    xd:>http post --data "[{\"собака\":\"пудель\"}, {\"собака\": \"чихуахуа\"}, {\"собака\":\"пудель\" }]"

2015-10-21T10:52:31-0700 1.2.0.ИНФОРМАЦИЯ О ВЫПУСКЕ sin.dogstream- {собака=пудель}

2015-10-21T10:52:31-0700 1.2.0.ИНФОРМАЦИЯ О ВЫПУСКЕ sin.dogstream- {собака=чихуахуа}

2015-10-21T10:52:31-0700 1.2.0.ИНФОРМАЦИЯ О ВЫПУСКЕ sin.dogstream- {собака=пудель}

Так что сплиттер работает.

  1. Затем добавьте счетчик значения поля в вышеприведенный поток.

    stream create --name dogCounter --definition "tap:stream:dogstream > счетчик значений поля --fieldName=dog" --deploy

Теперь, вот ВОПРОС. Если я отправлю больше данных (о собаках), SpringXD должен создать счетчик значения поля (я думаю, ленивое создание) и увеличить счетчик собаки для каждого типа собаки, но я этого не делаю. не вижу ничего происходящего. Остальная конечная точка (http://localhost:9393/metrics/field-value-counters/) не показывает счетчик, который я создал.

Кто-нибудь может подумать о причине? Поддерживает ли SpringXD это? Я думаю, что это законный вариант использования.


person nanaboo    schedule 21.10.2015    source источник


Ответы (1)


Две проблемы:

<сильный>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
person Gary Russell    schedule 22.10.2015
comment
Это потрясающе. Спасибо @GaryRussell. Я узнал две новые функции. Я вижу теперь 2 пуделя и 1 чихуахуа! {name:dogCounter,links:[{rel:self,href:localhost:9393/metrics /field-value-counters/dogCounter}],counts:{чихуахуа:1.0,пудель:2.0}} - person nanaboo; 22.10.2015
comment
Здесь принято помечать ответ как принятый, если он решает вашу проблему (нажмите галочку/галочку); это поможет другим. - person Gary Russell; 22.10.2015