0

语境:

1)我们有一个调度程序,它通过以阻塞方式调用另一个 rest-call 来获取作业并处理它们。

2)调度程序线程需要等待休息调用完成并根据结果依次执行一些其他任务。

3) 对于实时性没有任何限制。

问题陈述:

1)我们想要的是在进行外部调用后立即释放调度程序线程,因为外部调用需要大量时间才能完成。

2)我们应该被告知从外部调用收到的结果,因为我们需要根据结果进行一些处理。

我心中的想法:

1)我们可以将事件推送到队列中,而不是使用同步Http调用来调用外部系统。

2)另一个系统的API使用者将从队列中读取事件并执行长时间运行的任务。并且后期处理将结果推送回不同主题的队列。

3)我们的系统现在可以从队列(第二个主题)中读取响应并执行必要的操作。

这是我的设计方法之一

我需要关于我们是否可以以某种方式改进设计的建议。

1)这可以在不引入队列的情况下完成吗?

2)有没有更好的方法来实现异步处理?

4

1 回答 1

0

如果您想避免使用队列,我可以考虑其他两种选择,例如:

1)我们可以将事件推送到队列中,而不是使用同步Http调用来调用外部系统。

备选方案 a)

您执行同步 HTTP GET 来告诉其他系统您希望执行某个作业(其他系统快速回复“200 OK”以确认它收到了请求)。

备选方案 b)

您执行同步 HTTP GET 来告诉其他系统您希望执行某个作业(其他系统快速回复“200 OK”和一个唯一 ID 来标识要执行的作业)

2)另一个系统的API使用者将从队列中读取事件并执行长时间运行的任务。并且后期处理将结果推送回不同主题的队列。3)我们的系统现在可以从队列(第二个主题)中读取响应并执行必要的操作。

备选方案 a)

收到请求后,另一个系统会执行长时间运行的计算,然后当它准备好时,它会向您的原始系统发出同步 HTTP 调用,以通知作业已准备好。

备选方案 b)

收到请求后,另一个系统执行长时间运行的计算。原始系统不知道作业是否已完成,因此它会在特定时间轮询(对不同的 REST API 执行同步 HTTP GET)提供作业 ID,以确定作业是否已准备好。

于 2017-06-27T10:27:24.020 回答