我有一个顶点,它接受REST请求,通过事件总线从其他顶点获取数据并响应客户端。
vertx.exceptionHandler(event -> logger.error("Vertx exception ", event));
router.get("/api/v1/:param").handler(this::routerHandler);
public void routerHandler(RoutingContext rc) {
vertx.eventBus().request("data", param,
result -> {
if (result.succeeded()) {
logger.info("Request handled successfully");
// intentionally creating exception body() will return String
JsonObject jsonObject = (JsonObject) result.result().body();
rc.response().end(jsonObject)
}else{
logger.error("Request failed");
}
}
当引发异常时,它会打印在我在vertx实例中设置的异常处理程序中,但之后vertx不会立即向客户端报告异常,而是等待超时(30秒)发生。
我尝试将错误处理程序附加到路由器对象,将失败处理程序附加到路由对象,但没有任何帮助可以立即向客户端报告异常。我知道我可以尝试捕捉并在捕捉块中报告错误。但我想知道是否还有其他方法来处理这个问题,比如Servlet或Spring MVC报告返回给客户机,即使代码中没有处理异常。
router.errorHandler(500,routingContext -> {
System.out.println(routingContext.failed());
routingContext.response().end("Exception ");
});
router.route().handler(BodyHandler.create()).failureHandler(routingContext -> {
未捕获的异常会报告给上下文exceptionHandler
。默认情况下,它会将异常打印到控制台。
您可以对其进行配置,但无论如何都不会获得对相应HTTP请求的引用(例外情况可能来自不同的方面)。
大多数这样的问题通常在单元/集成/验收测试中发现。
对于剩余部分,您可以在路由器定义上设置一个超时处理程序,以确保请求在默认30秒前结束。
如果你不想错过任何未捕获的异常,你应该切换到Vert. x RxifiedAPI。使用RxJava时,抛出的任何异常都将报告给订阅者。
我注意到Rest客户端上有两个指南:MicroProfile和Vertx。既然微文件支持异步,那么使用基于Vertx的Rest客户端有什么好处?
我在服务器上使用GraphQL和mongoose。 当发生验证错误时,GraphQL突变发送状态代码为200的响应。在客户端,响应如下所示: 我想使用阿波罗客户端突变promise的功能访问验证错误。类似: 如何做到这一点?
我尝试使用EventHub Go客户端发送一个简单的“hello world”事件,但收到以下错误消息: *错误{条件:amqp:内部错误,描述:服务无法处理该请求;请重试该操作。有关异常类型和正确的异常处理的详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=761101TrackingId:be0c66437a1447b7accdc113c84955d
在我的quarkus rest项目中,我有一个使用mutiny的restclient: 我想处理Property non 2XX httpError,所以我制作了我的例外文件 客户端上的错误调用显示MyExceptionMapper处理响应,但异常会引发,并且不会成为我的Uni客户端响应对象上的失败 我是否以错误的方式对rest客户使用叛变? 谢谢 更新 好吧,我忘了添加依赖quarkus res
请给我一些关于任务解决方案的最佳模式的建议。我的任务是: 用户通过自己的rest控制器向Camunda处理器发出请求 后端端的BPMN架构由多个异步服务链组成 只有当BPMN上的一个最终服务做出响应时,数据才准备好响应给用户。 每条链条的工作时间不超过10-15秒。并且用户的会话计数每小时少于500个。 rest管制员的工作如何组织?在同一调用中强制控制器等待结果是否可以接受?瓶颈在哪?
我创建了一个SpringBoot的示例项目,以了解外部客户机功能,运行时会出现以下错误。 com.example.demo.RestClient中的字段Remote teCallClient需要一个类型为com.example.demo.Remote teCallClient的bean,但找不到。操作:考虑在配置中定义类型为com.example.demo.远程呼叫客户端的bean。 我尝试了各种