Вы можете попробовать использовать асинхронные счетчики , которые вы можете увеличивать всякий раз, когда вы отправляете событие на указанный c адрес на шине событий, а затем уменьшать его, когда вершина завершает обработку (или только что зафиксировала событие. ). Если у вас много вертикалей и вы не хотите изменять каждую из них, вы можете установить исходящий перехватчик :
vertx.eventBus().addOutboundInterceptor(deliveryContext -> {
//you can validate if the address is what you are looking for
if (deliveryContext.message().address().equalsIgnoreCase("http event")) {
//increment counter
}
deliveryContext.next();
});
, если у вас много адресов для покрытия, вы всегда можете добавьте в сообщение какой-нибудь заголовок c, а затем найдите его в перехватчике, но это будет означать, что вам придется изменять каждый вызов .send () в худшем случае:
vertx.eventBus().addOutboundInterceptor(deliveryContext -> {
//looking for specific header
if (deliveryContext.message().headers().contains("incrementCounterHeader")) {
//increment counter
}
deliveryContext.next();
});
//later in code
vertx.eventBus().send("http event", message,
new DeliveryOptions().addHeader("incrementCounterHeader", "somevalue"));
последнее, но не менее важное если вы решите использовать счетчик asyn c, возможно, вы захотите распространять только сообщения .onComplete () или .onSuccess (), в зависимости от логики вашего бизнеса c.
Надеюсь, это поможет!