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