@BeforeExecute("log.info('开始发送: ' + req.url)")
@Success(when="status_2xx and status_3xx", then="result.data")
@Retry(when="res.timeout and not status_2xx", maxRetryCount=3)
@Error(when="not res.success")
@AfterExecute("log.info('请求发送完成')")
PS: EasyEL仓库: https://gitee.com/dt_flys/easy-el
看看大家有什么要补充的需求和功能点以及改进的点
最近spring cloud社区 初现Spring Cloud Square 这个项目。感觉大同小异多封装了一层罢了,可以考虑支持根据服务名调用,以及负载均衡策略这些
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1.6.x版本下的新增特性2:新增生命周期注解配合表达式语言以减少使用拦截器。
这里面的 @BeforeExecute 开始注解到@AfterExecute结束的过程中会打印出当前bean生命周期详情(可配置),以及当前过程的时间吗?(时间可以划分为整体过程时间以及请求url时间)
对日志打印,是否能传入一下写自定义参数,比如发送短信的,我想传入 [短信发送] phone=188888888 然后请求和返回结果日志中都能携带这些信息,以后如果查询问题 能够快速定位
感觉声明式调用非常有利于大项目,因为在声明的同时就自动写出了一个API接口清单,方便一览API列表。
但是有时候在项目不大的情况下,就感觉有点略显啰嗦了,我更希望有一些简洁的 Util 式调用的方案,就像 Hutool-http 一样的:
String str = HttpUtil.get("http://xxx.com/xxx");
String str2 = HttpUtil.post("http://xxx.com/xxx");
以下是个人猜想:
forest 在声明式调用已经支持比较完善的情况下,加一个util式调用应该不算太难,底层地基都已经打好了,缺少的可能就是一些相关模块API的设计
这个功能纯属个人意见,如果和 forest 原本的升级计划相冲突,可以直接忽略
能不能支持添加对返回json报文的处理,比如从响应报文中直接返回指定jsonPath的数据,添加对jsonPath的支持或者更强大的spel表达式
是否有计划支持高版本 JDK 呢? jdk 17 是 LTS 是否香呢?
public class Test {
public static void main(String[] args) {
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6, 7, 8);
// peek不会终止流,peek属于中间操作
Stream<Integer> peek = stream.peek(i -> System.out.println(i));
long count = peek.count();
System.out.println("count = " + count);
}
}
目前的JDk 17,就执行不了,但是JDK 8可以的,JDK的版本在这里https://www.yuque.com/sunxiaping/yg511q/chqmin。
支持jdk11的HttpClient
支持链路跟踪吗
是否可以支持下数据缓存
对微服务的一些支持
目前我在项目中使用的是 com.github.lianjiatech:retrofit-spring-boot-starter
我觉得有一点比较好的就是其使用的是 retrofit 接口,这样开发工具 idea 就直接内置了集成。所以这个项目是不是考虑尽可能融合进已有的生态或者自行提供类似的生态扩展集成。
希望可以拆分http组件,比如 forest-httpclient(java11) ,forest-okhttp3,forest-httpcomponents(httpclient)。其中这几个组件互相不依赖
考虑支持spring-cloud么,做服务间调用和负载均衡
能否动态的去切换http代理
可以在拦截器中,动态设置代理参数
https://forest.dtflyx.com/docs/basic/request#%E4%BB%A3%E7%90%86
请问能否支持URL带部分特殊字符,例如$。最近调用第三方API的时候,有些会带特殊字符,会转义为24%,直接报404。
例如易快报的API:获取预算节点和子节点详细信息
能否支持实例化多个client,多次使用Forest.clien()返回的是同一个client,拦截器也是
okhttp能否打印curl加入这个依赖日志打印curl定位问题更方便
com.github.mrmike
ok2curl
0.7.0
希望拦截器等配置能支持实例化
希望能有webui展示页面,在页面中可以查看各个htpp接口信息,并能转为接口文档下载。
在页面中除了基本的用户管理、权限管理、菜单管理等常见的模块,希望还能有接口管理,接口管理中除了对接口信息的管理外,还提供对接口的流量情况、访问失败次数等等做个统计,通过访问量可以直观、清晰地感受到不同接口在业务端的地位是不同的,对于后续业务的选择、营销、关注点等等有个预知。
什么时候更新1.6呢,期待拆分组件,现在引用有点多
可否支持多个ip负载均衡调用?
日志拦截能否在requestLoggingContent和responseLoggingContent中增加携带attachment参数呢,使用场景:想把一个的完整请求+响应放入一个transaction,这样在日志中框架中,可以展示完整的调用链,而不是两个独立的日志块。
目前可以通过线程绑定变量的方式,去绑定需要携带的transactionId。
希望能支持。
是否考虑加入对 HTTP 请求限流的功能?
谢谢作者的框架,非常好用。
是否考虑添加 配置 非全局 最大异步线程数,
我在文档里没有找到 针对 特定 请求的 最大异步线程数 配置,文档里有多种配置全局 最大异步线程数 的方式,有没有什么方法 或 方式 针对 某个 BaseRequest 请求,配置 最大异步线程数, 因为有些网站 会对 请求 进行 并发数量限制,感觉这个功能还是很有用的,如果有的话麻烦告知一下,非常感谢。
目前来说,异步和同步的线程池只有全局的,如果要针对某一个BaseRequest请求设置线程池是比较困难的,我能大概想到三种比较间接的方案:
使用 max-route-connections 配置项,能达到比较相似的效果,它能设置每个路由(就是域名)可以同时容纳的最大请求数。缺点是,它不是真正的线程池,它也不区分同步和异步的请求,会一起限制。
使用多个 ForestConfiguration,每个 ForestConfiguration 配置不同的最大异步线程数,然后根据你的需要将不同的 BaseRequest 接口分配给不同的 ForestConfiguration。缺点是管理相对复杂,而且只有编程式和spring项目可以使用,springboot项目只能有一个全局的 ForestConfiguration (当然你也通过指定 xml 方式来定义 bean 也可以实现配置多个 ForestConfiguration)。
直接使用自定义的 OkHttpClient 或 HttpClient 对象,绕过 Forest 的线程池,直接使用 Okhttp 和 HttpClient 的连接池进行管理,缺点是实现相对复杂。
可以支持通过配置指定使用哪个json序列化框架,目前最新版本对fastjson2.x版本支持有点问题,有个类报找不到,而且一旦类路径下有了fastjson依赖,就强制使用fastjson,感觉不太好
可否 在拦截器中,支持 对 URL 中 变量得自定义 赋值 ? 现在仅支持 从 方法入参获取或全局配置中获取。
重试或者重定向的时候是新创建一个httpclient去发请求,还是使用原来的httpclient。对于状态码是202,302的请求,需要使用原来的httpclient,或者创建新的httpclient携带上第一个请求返回的cookie等头信息
能否支持声明式接口自定义 bean 的 name ,以防多个不同包但类名相同的接口 bean name 冲突,类似 spring 的 @Service("userService")。
能否自定义日志级别,比如我想在 warn 或 error 级别打印请求参数及相应内容。现在只能在 debug 级别打印日志。
强烈建议请求&返回日志合并,或增加标识,否在在同一个链路请求下 请求返回打印穿插 难以识别
希望支持http2.0通信协议
希望支持websocket
希望内置或单独提供一个工具(网页)可以将curl格式的请求直接转换成forest的不同形式的代码。
希望支持实体参数字段的别名注解,有些接口文档的字段是下划线,JAVA里面字段用驼峰比较规范,感谢。
希望forest的下一个版本中支持converter转换器可以获取到method方法上的annotations,方便自定义转换器做一些特殊处理
public class SimpleResponseConverter extends ForestFastjsonConverter {
public static final List<Integer> SUCCESS_CODE_LIST = Lists.newArrayList(200, 0);
@Override
public <T> T convertToJavaObject(String source, Type targetType) {
if (targetType == SimpleResponse.class) {
return JSON.parseObject(source, targetType);
}
JSONObject responseObject = JSON.parseObject(source);
Integer code = responseObject.getInteger("code");
if (!SUCCESS_CODE_LIST.contains(code)) {
return null;
}
return responseObject.getObject("data", targetType);
}
}
我是想在converter中decode的时候获取方法上的注解做一些特殊处理, 比如上面中直接就解析响应结果判断出code码
什么时候支持native呢?
forest异常如何区分出连接超时异常和读超时异常呢?
登錄 後才可以發表評論