在Java EE应用程序中实现自动重试
最初,我想将此博客称为“ 具有拦截器驱动的重试策略的灵活超时 ”,但后来我认为它太“繁重”。 该声明以及修改后的标题应该(希望)使您了解此帖子可能谈论的内容;-)
触发
这篇文章主要由我在较早的一篇文章中收到的评论/问题之一驱动,其中简短地讨论了超时机制以及如何使用它们为状态和Singleton EJB定义“并发策略”。
问题
虽然超时是在EJB容器中强制执行并发策略和控制资源分配/使用的好方法,但是当超时不一致且不可预测时,就会出现问题。 那么您如何配置超时策略呢?
当然,没有完美的解决方案。 但是,我想到的一项工作是“ 重试 ”失败的方法(这对于您的给定方案可能不适当或不可能,但如果用例允许,则可以应用)。 这是“ 跨领域 ”关注(换言之,“ 方面 ”)的一个很好的例子。 Java EE为此的答案是– Interceptors 。 这些要比默认的“ 带有try-catch块的 “ rinp-repeat-until-xyz ”更好,因为
- 代码重用
- 灵活性
要点(解决方案)
这是高级描述( 代码可在Github上获得 )
- 定义一个简单的注释,表示“重试策略元数据”,例如重试次数
- 定义具有实现的重试器以重试目标方法–这将使用上述“重试策略”元数据并相应地执行操作
- 将此拦截器附加到所需的方法(调用方)
- (可选)使用@InterceptorBinding
样例代码
- 使用Singleton EJB模拟示例服务,并通过显而易见的Thread.sleep()引入延迟(当然,这在Java EE容器中是禁止的)
- 使用JAX-RS资源,该资源注入并调用Singleton EJB,并且是根据“策略”进行“重试”的候选对象
- 可以通过在任何兼容Java EE(6或7)的服务器上部署并使用Apache JMeter模拟并发客户端/请求进行测试(在http:// serverip:port / FlexiTimeouts / test上调用HTTP GET)
没有重试(拦截器)配置,测试(针对并发请求)将导致HTTP超时(408)。
一旦重试拦截器被激活,就会有一些延迟,因为一旦失败,任务将自动重试。 当然,这将取决于(并发请求的)数量,并且需要相应地调整阈值–对于高度并发的环境,阈值较高(通常,不理想)
其他想法
- 在代码中定义阈值或重试策略不是强制性的。 也可以将其外部化(以使事情更灵活),例如,使用@RetryPolicy指向包含所需策略元数据的文件
- 重试阈值不是唯一可配置的属性。 您可以具有其他条件,并在拦截器逻辑中使用它
- 可以公开与成功/失败/重试有关的统计信息。 最好以异步方式执行此操作(通过@Async EJB将其推送到JMX?),这样就不会妨碍Interceptor自身的性能。
干杯!
翻译自: https://www.javacodegeeks.com/2015/11/implementing-auto-retry-in-java-ee-applications.html
在Java EE应用程序中实现自动重试相关推荐
- java ee的小程序_在Java EE应用程序中实现自动重试
java ee的小程序 最初,我想将此博客称为" 具有拦截器驱动的重试策略的灵活超时 ",但后来我认为它太"繁重". 该声明以及修改后的标题应该(希望)使您了解 ...
- 使用tinylog 1.1改进您在Java EE应用程序中的登录
tinylog是Java的轻量级日志记录框架. 与Apache Log4j和Logback相反,tinylog由仅80KB的单个JAR文件组成,没有任何依赖性,并且具有静态logger类. 这意味着您 ...
- java ee的小程序_扩展Java EE应用程序的基础
java ee的小程序 老实说,"可扩展性"是一个详尽的主题,并且通常没有被很好地理解. 通常,它被认为与高可用性相同. 我已经看到新手程序员和"经验丰富"的建 ...
- 扩展Java EE应用程序的基础
老实说,"可扩展性"是一个详尽的主题,并且通常没有被很好地理解. 通常,它被假定与高可用性相同. 我已经看到新手程序员和"经验丰富"的建筑师都建议将" ...
- swarm部署集群_WildFly Swarm –将Java EE应用程序部署为独立的Jar
swarm部署集群 WildFly Swarm提供了一个简单的解决方案,用于将Java EE应用程序部署为独立的Jar文件. 这使得部署应用程序非常容易,尤其是REST或Web服务. Swarm在这方 ...
- java拦截器项目应用_使用拦截器分析Java EE应用程序的性能下降/提高
java拦截器项目应用 在开发具有某些性能要求的Java EE应用程序时,必须在每个发行版之前验证是否满足这些要求. 您可能会想到,哈德森的一项工作每天晚上在某些特定的硬件平台上执行一系列测试测量. ...
- WildFly Swarm –将Java EE应用程序部署为独立的Jar
WildFly Swarm为将Java EE应用程序部署为独立的Jar文件提供了一种简单的解决方案. 这使得部署应用程序特别是REST或Web服务非常容易. Swarm在这方面与Spring Boot ...
- openshift 部署_OpenShift Express:部署Java EE应用程序(支持AS7)
openshift 部署 在过去的几年中,我越来越多地听说过"云"服务. 最初,我并不是很想尝试一下. 但是几个月后(一年?),我决定看看这是怎么回事. 我从事Java EE开发已 ...
- muy bien_配置Java EE应用程序或“将Bien付诸实践”
muy bien 过去,有关应用程序配置的讨论很多. 我不知道谁拉开了辩论的序幕,但是最基础的阅读(着眼于未来的Java EE 7及更高版本)是Antonio Goncalves的帖子[辩论] – J ...
最新文章
- C++:将char*指针强制转换成一个指向结构体的指针
- 小程序订阅消息 订阅消息开发
- Nature:承磊/李猛等发现产甲烷古菌的碳代谢新途径
- django 框架中应用 redis 集群
- 算法学习之百钱买百鸡
- 鸿蒙45000,华为发布鸿蒙系统沟通口径通知 网友表示支持国货
- 关于LayoutParams
- 【剑指offer】面试题11:旋转数组的最小数字(java)
- Web前端期末大作业--响应式健身会所网页设计(HTML+CSS+JS)实现
- 美图秀秀 Mac版终于上线 关于美图秀秀 Mac版初体验
- 什么是应用管理与运维平台(ServiceStage)?
- 点云 高斯 曲率matlab,计算三维散乱点云的曲率,包括主曲率,高斯曲率和平均曲率...
- kali无法连接网络(网络不通)
- AMD EPYC(霄龙)Genoa服务器 | 综合评测
- 无干扰网络收音机:Radium for Mac
- Java Shiro 设置 anon 无效
- java redis srem_Java Jedis.srem方法代碼示例
- Excel报:文件已损坏无法打开错误问题解决
- 解决git pull中 fatal: Not possible to fast-forward, aborting
- 【ICLR 2023】RankCSE:基于排序学习的无监督句子表示学习