Error handling Vertx:如何在故障处理程序中获取fail()状态代码?

Error handling Vertx:如何在故障处理程序中获取fail()状态代码?,error-handling,vert.x,Error Handling,Vert.x,如何在故障处理程序中检索传递的状态代码(使用注册)? 例如,如果某些路由的处理时间过长,它可能会被调用RoutingContext上的fail(408)的TimeoutHandler中断失败方法随后调用失败处理程序(如果已注册)。但是,我找不到任何方法(除了反射&取决于实现)如何在处理程序本身中找到调用它的原因: RoutingContext.failure()返回null 状态代码似乎仅在RoutingContextImpl的私有字段中设置,尚未在HttpServerResponse 您应该

如何在故障处理程序中检索传递的状态代码(使用注册)?

例如,如果某些路由的处理时间过长,它可能会被调用
RoutingContext上的
fail(408)
TimeoutHandler
中断<代码>失败
方法随后调用失败处理程序(如果已注册)。但是,我找不到任何方法(除了反射&取决于实现)如何在处理程序本身中找到调用它的原因:

  • RoutingContext.failure()
    返回
    null
  • 状态代码似乎仅在
    RoutingContextImpl
    的私有字段中设置,尚未在
    HttpServerResponse

您应该能够看到错误代码,因为有针对特定场景的单元测试:

router.route(path).handler(rc -> {
  rc.fail(400);
}).failureHandler(frc -> {
  assertEquals(400, frc.statusCode());
  frc.response().setStatusCode(400).setStatusMessage("oh dear").end();
});

您如何注册您的处理程序?和故障处理程序?

不确定较旧版本的Vert.x,但从3.0.0开始:

eventBus.send("some.address", "some value", event -> {
  if (event.succeeded()) {
    System.out.println("Received reply: " + event.result().body());
  } else {
    ReplyException cause = (ReplyException) event.cause();
    String failMessage = cause.getMessage();
    int failCode = cause.failureCode();
  }
});

使用
Route.handler()
Route.failureHandler()
,与您的示例完全相同。根据测试,这应该有效,为了完成,您使用的是什么版本?请注意,3.3.0将在几天后推出