1

我是 vertx 的新手,正在尝试使用 ABCHandler.java 中的 vertx.executeBlocking 执行函数 1

public class ABCHandler implements Handler<RoutingContext> {

public ABCHandler( Vertx vertx)
{this.vertx =vertx;}


@Override
public void handle(RoutingContext routingContext) {

    vertx.executeBlocking(future -> {
            function1(routingContext, as ->
            {
                if (as.failed()) {

                    future.fail(as.cause());
                } else {
                    future.complete(as.result());

                }
            });
        }, rs -> {

            if (rs.failed()) {

                routingContext.response().putHeader(CONTENT_TYPE,
                   "application/json").setStatusCode(Integer.valueOf(401)).end("error");

            } else {
                routingContext.put("key_1", rs.result());
                routingContext.next();
            }
        });
}

}

ABCHandler 旨在在将请求路由到实际 URI 之前验证一些数据。但是在 routingContext.next(); 之后 我收到 500(内部服务器错误)。

 WebClientCreator.getWebClient(vertx);
 Router router = Router.router(vertx);
 router.route().handler(new ABCHandler(vertx));
 router.post(AgentBindingConstants.AGENT_ENROLLMENT_URI).handler(

 BodyHandler.create().setBodyLimit(10000));
    router.post("/abc").handler(routingContext -> {
        //some code
    });

此外,当我运行与非阻塞相同的代码时,它可以工作。

非常感谢这里的任何帮助。

4

0 回答 0