Я хочу использовать метрики dropwizard для асинхронного обратного вызова в моем приложении. Я асинхронно вставляю записи в cassandra.
У меня есть список запросов (связанных состояний), выполняемых асинхронно. Я добавил обратный вызов для отслеживания onSuccess () и onFailure () для моего асинхронного выполнения.
(Семафор также существует, чтобы ограничить число асинхронных запросов вставки)
Теперь я хочу правильно реализовать метрику, чтобы я мог измерить или контролировать следующее:
- Количество запросов / запросов на вставку, отправленных за минуту.
- Номер успешно выполненного запроса
- Количество ответов, полученных после успешной вставки (число успешных попыток, процент успешных попыток в минуту)
- Количество ответов, полученных после вставки ошибки (failCount, частота отказов в минуту)
Ниже приведен мой фрагмент кода, для которого мне нужно включить метрики. Пожалуйста, помогите.
final Semaphore queryPermits= new Semaphore(100);
public List<ListenableFuture<ResultSet>> sendAsyncQueries(List<BoundStatement> boundStatements) throws CqlException, AdapterException {
List<ListenableFuture<ResultSet>> futures = new ArrayList<>();
final ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10));
for (BoundStatement boundStatement : boundStatements) {
try {
queryPermits.acquire();//Sempahore to throttle cassandra insert
} catch (InterruptedException e) {
LOG.error("InterruptedException while acquire permit for asynchronous insertion ",e);
}
try {
final ListenableFuture<ResultSet> resultSetFuture = executeAsynchronously(boundStatement, ConsistencyLevel.QUORUM);
Futures.addCallback(resultSetFuture,
new FutureCallback<ResultSet>() {
@Override
public void onSuccess(ResultSet result) {
LOG.debug("Inserted cassandra row ");
queryPermits.release();
}
@Override
public void onFailure(Throwable t) {
LOG.error("Error while inserting inCassandra ");
queryPermits.release();
}
},
executor
);
futures.add(resultSetFuture);
}catch(AdapterException e){
queryPermits.release();
throw e;
}
}
return futures;
}