目前,我正在探索在Spring Boot中以AOP方式实现请求超时管理的方法,但有几个限制。要求/限制如下:
>
要监控的RESTAPI由标准spring mvc rest控制器实现。内部的所有API都返回json字符串,如下所示:
@RestController
public class xxxxxx {
@RequestMapping(value = "xxxxxxx")
public String xxxxxx(@RequestParam(value = "xxxx", required = true) String xxxx) {
....
return json.toString();
}
}
我已经找到了一个答案(异步方法),可以完美地解决spring async本身的问题,超时返回结果非常漂亮,但它改变了返回类型,也触及了控制器中的代码。我也发现了一个使用AOP的解决方案(AOP方法),但是这个场景和我的很不一样。它已经将一些业务逻辑转移到AOP类中,但是不允许我接触控制器代码。如果有人能提供解决方案,我将不胜感激。不能满足所有限制但能最小化差异的解决方案也是可以接受的。
由于这个问题仍然没有得到答复,我将在这里提出我自己的临时解决方案。
我用的是Hystrix依赖。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.0.RELEASE</version>
</dependency>
它与springboot很好地集成,因此配置很容易。正确配置后,需要在需要超时处理的请求方法上附加注释。例如
@HystrixCommand(fallbackMethod="fallback")
@RequestMapping(value = "xxxxxxx")
public String xxxxxx(@RequestParam(value = "xxxx", required = true) String xxxx) {
....
return json.toString();
}
并且需要添加一个回退方法,其名称映射到批注内“fallback method”的值:
public String fallback() {
...
}
超时时间值可以在application.properties中全局配置
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=3000
这在以下几点仍然不简洁:
但至少它不再改变方法返回类型和方法内部的代码,这是我目前能想到的最好的解决方案。一旦我找到更好的解决方案,它将执行更新。
比如我请求了别人,超时时间是5秒,超时后需要打印日志。 微服务是通过openfeign请求的,希望可以打印日志,代码不是手动请求的,不然加上打印代码就好了。
本文向大家介绍aop注解方式实现全局日志管理方法,包括了aop注解方式实现全局日志管理方法的使用技巧和注意事项,需要的朋友参考一下 1:日志实体类 2:maven需要的jar 这里要求项目使用的是jdk1.7 3:springServlet-mvc.xml 加上proxy-target-class="true"是为了可以拦截controller里面的方法 4:定义切面,我这里主要写前置通知和异常通
我正在尝试使用<code>网络客户端 谢谢 -斯里尼
这个任务用于展示如何使用Istio在Envoy中设置请求超时。 开始之前 遵循安装指南 的指导安装Istio。 部署BookInfo 示例程序。 执行如下命令,初始化基于应用版本的路由。 istioctl create -f samples/bookinfo/kube/route-rule-all-v1.yaml 注意:本任务假设在Kubernetes上部署这一应用。所有涉及的命令都使用的是K
本文向大家介绍SpringBoot请求参数接收方式,包括了SpringBoot请求参数接收方式的使用技巧和注意事项,需要的朋友参考一下 application/json接收 x-www-form-urlencoded、?拼接、form-data接收 UserDto 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍使用Spring的注解方式实现AOP实例,包括了使用Spring的注解方式实现AOP实例的使用技巧和注意事项,需要的朋友参考一下 spring对AOP的实现提供了很好的支持。下面我们就使用Spring的注解来完成AOP做一个例子。 首先,为了使用Spring的AOP注解功能,必须导入如下几个包。aspectjrt.jar,aspectjweaver.jar,cglib-nodep.j