java - Java 和 Spring - 轮询 http 端点,直到服务器完成处理
问题描述
我正在努力寻找以恒定间隔(例如〜1秒)轮询服务器的正确方法。
流程如下
- 客户端应用程序收到消息,表明轮询可以从提供的参数开始(不需要时它不会轮询)
- 客户端应用程序每隔约 1 秒开始轮询 http 端点,参数随消息到达(如查询参数)
- 服务器应用程序以待处理状态响应,以指示客户端应继续轮询
- 服务器应用程序以状态完成响应并返回结果 - 无需继续轮询。
我们可以有多个线程,因为客户端应用程序可能会在短时间内收到多条消息 - 轮询应该立即开始
我不想重新发明轮子,也许有一个合适的工具可以与我可以使用的 java/spring 一起使用?
主要特点
- 仅在需要时进行轮询
- 使用自定义参数进行轮询(查询字符串中的自定义参数)
- 扩展轮询,因为应用程序可以以相同的时间间隔同时轮询多个端点
我正在浏览各种库,如 Apache Camel 或 Spring Integration PollableChannel,但我觉得这些库都不能为我提供开箱即用的正确解决方案。
如果没有这样的库 - 我将使用 redis 和简单循环自己编写它,但也许有人遇到过类似的问题。
解决方案
如果我正确理解您的架构,重点是从客户端应用程序调用相同的 HTTP 端点,直到获得预期结果。在这种情况下,我建议RequestHandlerRetryAdvice
使用 anAlwaysRetryPolicy
和 a FixedBackOffPolicy
(默认为 1 秒)。
为了模拟异常,我建议ExpressionEvaluatingRequestHandlerAdvice
使用选项从服务器的回复时propagateOnSuccessEvaluationFailures = true
重新抛出异常是.onSuccessExpression
pending
这两个建议(确切地说RequestHandlerRetryAdvice
,ExpressionEvaluatingRequestHandlerAdvice
)你需要@ServiceActivator
申请HttpRequestExecutingMessageHandler
。
推荐阅读
- java - 无论如何,是否可以使用 Java 代码从“PUBmed”文章中获取完整摘要
- javascript - JavaScript如何用另一个数组的每个元素替换数组的第一个元素
- amazon-web-services - 无法在 AWS 上设置 HashiCorp Vault
- node.js - Office 365 POP 提取邮件出现间歇性错误登录失败:未知用户名或密码错误
- ruby - 如何使用 unixODBC 从 DB2 V11.5 Linux 上的表 SYSIBM.SQLCOLUMNS 获取 column_def 值 - Ruby
- android - 单击登录按钮时应用程序崩溃(简单登录注册测试)
- spring-boot - Spring thymeleaf 模板引擎找不到模板文件
- php - elFinder - 如何从 AWS S3 存储桶打开/显示特定文件夹
- jquery - Ajax 请求正常,但在错误响应文本中接收数据
- amazon-web-services - AWS ECS:如何在不使用 ALB 的情况下在 ECS 集群内的服务之间进行通信?有办法吗?