扒一扒@Retryable注解,很优雅,有点意思! (5)

简介: 扒一扒@Retryable注解,很优雅,有点意思! (5)

拿这个代码去套“Closest”这个玩意。

首先,cause 就是抛出的 TimeoutException。

而 methods 这个 Map 里面装的就是三个被 @Recover 注解修饰的方法。

为什么有三个?

好问题,说明我前面写的很烂,导致你看的不太明白。没事,我再给你看看往 methods 里面 put 东西的部分的代码:

image.png

这三个方法都满足被 @Recover 注解的条件,且同时也满足返回值和目标方法 callChannel 的返回值一致的条件。那就都得往 methods 里面 put,所以是三个。

这里也解释了为什么兜底方法是用一个 Map 装着呢?

我最开始觉得这是“兜底方法”的兜底策略,因为永远要把用户当做那啥,你不知道它会写出什么神奇的代码。

比如我上面的例子,其实最后生效的一定是这个方法:

@Recover
public void channelNotResp(TimeoutException timeoutException) throws Exception {
    log.info("3.没有获取到渠道的返回信息,发送预警!");
}

因为它是 Closest。

给你截个图,表示我没有乱说:

image.png

但是,校稿的时候我发现这个地方不对,并不是用户那啥,而是真的有可能会出现一个 @Retryable 修饰的方法,针对不同的异常有不同的兜底方法的。

比如下面这样:

image.png

当 num=1 的时候,触发的是超时兜底策略,日志是这样的:

http://localhost:8080/callChannel?num=1

image.png


妙啊,真的是妙不可言啊。

看到这里我觉得对于 Spring-retry 这个组件算是入门了,有了一个基本的掌握,对于主干流程是摸的个七七八八,简历上可以用“掌握”了。

后续只需要把大的枝干处和细节处都摸一摸,就可以把“掌握”修改为“熟悉”了。




有点瑕疵


最后,再补充一个有点瑕疵的东西。

再看一下它处理 @Recover 的方法这里,只是对方法的返回值进行了处理:

image.png

我当时看到这里的第一眼的时候就觉不对劲,少了对一种情况的判断,那就是:泛型。

比如我搞个这玩意:

image.png

按理来说我希望的兜底策略是 channelNotRespInt 方法。

但是执行之后你就会发现,是有一定几率选到 channelNotRespStr 方法的:

image.png

假设我们要支持泛型呢?

从 github 上的描述来看,目前作者已经开始着力于这个方法的研究了:

image.png

从 1.3.2 版本之后会支持泛型的。

但是目前 maven 仓库里面最高的版本还是在 1.3.1:

image.png想看代码怎么办?

只有把源码拉下来看一眼了。

直接看这个类的提交记录:

org.springframework.retry.annotation.RecoverAnnotationRecoveryHandler

image.png

可以看到判断条件发生了变化,增加了对于泛型的处理。

我这里就是指个路,你要是有兴趣去研究就把源码拉下来看一下。具体是怎么实现的我就不写了,写的太长了也没人看,先留个坑在这里吧。


image.png

image.png

目录
相关文章
|
1天前
|
数据采集 人工智能 安全
|
10天前
|
云安全 监控 安全
|
2天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
914 150
|
2天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1647 8
|
7天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
608 152
|
9天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
572 13
|
6天前
|
人工智能 前端开发 文件存储
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择
星哥带你玩转飞牛NAS,部署开源笔记TriliumNext!支持树状知识库、多端同步、AI摘要与代码高亮,数据自主可控,打造个人“第二大脑”。高效玩家的新选择,轻松搭建专属知识管理体系。
366 152
|
9天前
|
人工智能 自然语言处理 API
Next AI Draw.io:当AI遇见Draw.io图表绘制
Next AI Draw.io 是一款融合AI与图表绘制的开源工具,基于Next.js实现,支持自然语言生成架构图、流程图等专业图表。集成多款主流大模型,提供智能绘图、图像识别优化、版本管理等功能,部署简单,安全可控,助力技术文档与系统设计高效创作。
663 151