0

在将 HTTP 服务器部署为工作线程时,是否有任何其他方法可以让多个请求等待工作线程处理?我需要https://vertx.io/docs/vertx-dropwizard-metrics/java/#_pool_metrics的替代品。

4

1 回答 1

0

您可以尝试使用异步计数器,您可以在将事件发送到事件总线上的特定地址时递增,然后在 Verticle 完成处理(或刚刚拾取事件)时递减。如果您有很多verticles并且不想修改它们中的每一个,您可以设置出站拦截器

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() 调用:

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

希望这会有所帮助!

于 2020-06-18T17:04:53.783 回答