【问题标题】:Polling application untill condintions are met in SpringBoot在 Spring Boot 中轮询应用程序直到满足条件
【发布时间】:2021-02-14 20:57:54
【问题描述】:

我必须使用 Java 和 SpringBoot 构建一个服务,该服务将负责通过 API 轮询应用程序,直到满足条件。所以我正在发送 POST 请求,应用程序必须做一些事情。然后我向这个应用程序发送 GET 请求并获取数据。我正在检查任务是否完成。如果没有,我需要再发送一次这个 GET 请求,例如。每 10 秒。如果分析完成,那么我应该停止轮询。我尝试使用调度程序,但检查条件存在问题。 Runnable 对象不能返回任何值,所以我不能在适当的时候取消任务。第二件事是我可以同时有多个任务进行轮询。您知道如何解决我的问题吗?

【问题讨论】:

  • 您想为每个任务分配不同的线程吗?您有可以跟踪请求的表格吗?
  • 我可以在数据库中存储有关请求的信息。关于线程,很难说。我不知道我可以同时期待多少个请求。但可能我可以有多个线程。或者,也许我应该限制要处理的请求数量,而其余的则保留在队列中?
  • 你说你会发送POST请求,但是这些请求是如何发起的呢?您是否收到来自另一个应用程序的请求,或者您基于某些不同的业务逻辑调用 POST?我之所以这样问,是因为如果您公开自己的 api 而不是进一步传递它,我认为在同一个线程上进行 get pooling 不是一个好主意,因为您最终可能会同时使用多个活动线程.
  • 是的,我将收到来自另一个应用程序的请求,然后我必须稍微修改该请求并向第三个应用程序发出新的 POST 请求。所以我的应用程序将位于该链的中间。
  • 好的,GET 询问的目的是什么?您是否必须以任何方式通知他们?我认为他们不会等到处理完成。

标签: java spring api task polling


【解决方案1】:

我正在考虑两种选择:

  1. 每次发送 POST 时,都会将请求的详细信息保存在表中。使用 @Scheduled 注释,在 x 秒后,您可以查询表并为所有尚未处理的请求调用 GET api。处理请求后,您可以更新表格中的状态,以便下次不会再收到它。
  2. 每次发送 POST 请求后,使用 ThreadPoolExecutor 添加一个线程,该线程将轮询 GET api。 编辑:现在有了全貌,我认为您应该保留这两个选项的请求详细信息,因为如果出现问题,您需要将详细信息保存在某个地方以备将来重试。

【讨论】:

  • 感谢您的帮助。我将尝试实施该解决方案。
猜你喜欢
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
相关资源
最近更新 更多