Cloudwatch должен быть в состоянии не отставать от вашего метрического тома, поэтому я бы просто использовал 1 PutMetricDataRequest
для каждой партии, поступающей из исходных приложений, и Cloudwatch делает агрегацию.
Если вы посмотрите на PutMetricDataRequest
, он принимает Collection<MetricDatum>
, который отлично подходит для получения любого количества ключей, которые вы получаете от исходных приложений, в одном запросе.
====
Преобразование HashMap в список довольно просто с Java8 потоков API:
Предполагая, что ваша карта является ключом карте => значение:
Map<String, Object> metricMap = new HashMap<>();
metricMap.put("metricKey", 99);
You может использовать API-интерфейс Java8 с картой и собирать:
List<MetricDatum> metrics = metricMap.entrySet().parallelStream()
.map(map -> new MetricDatum()
.withMetricName(map.getKey())
.withUnit(StandardUnit.Count)
.withValue(Double.valueOf(map.getValue().toString()))
).collect(Collectors.toList());
Спасибо за ответ. В моем случае данные поступают в виде HashMap. В основном у меня есть фасад с различными режимами подписки (один из них - Cloud watch). Карта переместится в Facade, а затем доступна для разных подписчиков. Таким образом, в этом случае я получаю такой же хэш-файл. Вы предлагаете мне перебрать все ключи и значения в hashmap, чтобы преобразовать их в карту MetricDatum? –
Lovey
@ Lovey: Я бы использовал API потоков Java8, который должен сделать это довольно простым. Я добавил образец кода в ответ, иллюстрирующий операцию. –
все тот же. Но это нормально. У меня есть то, что вы пытаетесь сделать здесь. Благодарю. – Lovey