在将HTTP服务器部署为工作台时,还有其他方法可以获取大量等待工作线程处理的请求吗?我需要https://vertx.io/docs/vertx-dropwizard-metrics/java/#_pool_metrics的替代方法。
答案 0 :(得分:0)
您可以尝试利用Asynchronous Counters,您可以在每次将事件发送到事件总线上的特定地址时递增,然后在完成顶点处理(或刚刚提取事件)时递减。如果您有很多顶点并且不想修改每个顶点,则可以设置outbound interceptor:
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();
});
如果要处理的地址很多,您可以始终在邮件中添加一些特定的标头,然后在拦截器中查找它,但这意味着在最坏的情况下,您必须修改每个.send()调用:< / p>
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"));
最后但并非最不重要的一点是,如果您决定使用异步计数器,则可能只希望传播消息。onComplete()或.onSuccess()取决于您的业务逻辑。
希望这会有所帮助!