0

我的应用环境是Tomcat 7.0,JDK 1.7。我将 Jersey 用于 REST API。我们的一个 post 类型 REST API 请求的处理时间超过 3 分钟,这只是大约时间,可能超过 3 分钟。然后,当我们的请求处理完成时,我们将响应发送回客户端。但是这里的请求处理需要 3 分钟,所以我在客户端得到了请求超时,并且我没有从服务器得到任何响应,因为我期望成功响应

服务器上的请求处理如下:

开始请求

  1. 将详细信息插入数据库表[此过程需要几秒钟的时间]
  2. 将文件复制到远程计算机服务器 [此过程需要 3 分钟]
  3. 更新/激活文件 [此过程需要几秒钟的时间]
  4. 向客户端发送响应

结束请求处理

以上所有流程都必须在 transaction 中,所以我们不能删除以上任何流程,

我们已经提高了流程第 2 步的最佳性能,并且只有在我们请求超过 1 gb 大小的文件时才会发生这种情况。

到目前为止,对于临时解决方案,我们已经增加了在 Apache 服务器中配置的超时值。

现在我正在寻找我的问题的解决方案,使用以下任何一种方法:

  1. 建议我任何可以解决我的问题的开发或实施策略,并且应该像我描述的那样预期?
  2. 如何解决请求超时问题?
  3. 正在寻找响应完成时从服务器端通知客户端的解决方案?
  4. 正在寻找无法通过 Jersey REST API 实现关闭客户端和服务器之间的连接的解决方案?

感谢和问候亚廷·巴拉亚

4

1 回答 1

1

因为我想用以下方法解决我的问题。

解决我的问题的流程实施步骤

1.首先向服务器发送请求 ==========> 服务器立即将响应发送给客户端并生成一些 Id 并由同一进程中的其他线程启动长时间运行的进程。

2.在客户端首先收到第一个请求响应并等待几秒钟,然后再次向服务器发送其他请求以进行长时间运行的进程检查状态====>服务器获得第二个请求并响应客户端关于正在发送或已完成的长期运行响应状态的状态

3.如果客户端得到响应:in-progress

4.然后客户端等待几秒钟,然后再次发送状态检查请求===>服务器发送响应完成

5.如果客户端得到响应:完成

  1. 然后它开始从其队列中获取另一个请求。[当且仅当客户端获得完成状态和生成的 ID 时,它将开始下一个请求的过程]

这意味着在这里我们从客户端管理事务,向服务器发送多个请求并确认该过程是否成功完成,然后我们开始处理下一个动作。

通过上述方法,我们得到了交易流程,让我知道这是我解决上述问题的方法吗,是否足够或需要在此解决方案中进行任何更改?

于 2013-09-19T10:27:54.543 回答