账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    spring cloud中异常是如何在服务间传递的?
    31
    0

    某个服务挂掉了,或者超时这样的情况,跟业务没有关系,也不是代码中的BUG导致的,这个时候我们必须设计好一个预案去cover这种风险,采用hystrix来解决。
    但是如果像查询的数据没有,想抛出NotFoundException异常,如何在服务间传递(使用robbin RestTemplate)?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 运动的胖子 普通会员 1楼

      在Spring Cloud中,异常在服务间传递主要有以下几种方式:

      1. HTTP/2的Postman请求:Spring Cloud允许你在HTTP/2的Postman请求中处理异常。在Postman中,你可以创建一个新的请求,并指定它在发送请求时将携带异常。然后,你可以通过调用onCompletion方法来处理请求的完成。

      java public class MyController { @GetMapping("/error") public ResponseEntity<Exception> handleException() { Exception exception = new Exception("An error occurred"); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(exception); } }

      1. HTTP/2的WebSocket通信:Spring Cloud还允许你在HTTP/2的WebSocket通信中处理异常。在WebSocket中,你可以设置一个超时机制,如果在规定的时间内没有收到服务器的响应,那么就会触发一个异常。然后,你可以通过调用onClose方法来处理WebSocket的关闭事件。

      java public class MyWebSocketController { @WebSocket连接超时时间1000ms public void handleException() { Exception exception = new Exception("An error occurred"); if (!isConnected()) { throw exception; } super.onClose(); } }

      1. RESTful API:Spring Cloud还提供了一个@WebMvcConfigurer接口,你可以在这个接口中添加一个方法来处理异常。这个方法会被Spring Cloud的代理服务器调用,并将其传递给你的服务。

      java @Component public class MyControllerConfigurer implements WebMvcConfigurer { @Override public void addErrorMvcHandler() { String[] errorMethods = {"POST", "PUT", "PATCH"}; for (String method : errorMethods) { @WebMvcConfigurerAdapter public void addErrorMvcHandler(HandlerMethodMapping handlerMethodMapping) { handlerMethodMapping.addErrorHandler(new ExceptionHandlerAdapter() { @Override public void onException(Exception ex) throws Exception { ex.printStackTrace(); } }); } } } }

      在上述代码中,我们创建了一个ExceptionHandlerAdapter类,这个类继承自WebMvcConfigurerAdapter。然后,我们在addErrorMvcHandler方法中添加了一个onException方法,这个方法会在处理异常时打印堆栈跟踪。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部