将vertx httpserver部署为worker verticle时,如何获取等待处理的请求数?

时间:2020-06-18 02:16:56

标签: vert.x vertx-verticle

在将HTTP服务器部署为工作台时,还有其他方法可以获取大量等待工作线程处理的请求吗?我需要https://vertx.io/docs/vertx-dropwizard-metrics/java/#_pool_metrics的替代方法。

1 个答案:

答案 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()取决于您的业务逻辑。

希望这会有所帮助!