【问题标题】:REST ajax request is being invoked every 5 minutes | weblogicREST ajax 请求每 5 分钟调用一次 |网络逻辑
【发布时间】:2016-12-14 12:18:48
【问题描述】:

当我在 weblogic 10.3.0 上运行的 UI 代码调用休息 web 服务时,我遇到了这个问题,恰好 5 分钟后再次调用 web 服务。我很困惑问题出在哪里。

我的请求来自 ExtJS UI 上的 Ajax 调用。此请求会命中后端 Web 服务,通常会花费 5 分钟以上。因此,一旦第一次请求的时间超过 5 分钟持续时间,就会有另一个 Web 服务命中(根据日志)。我使用 firebug 检查了网络,但没有看到多个请求。

起初我认为这可能是 ajax 超时,因此尝试将 ajax 中的全局超时设置为 2 小时,但这无济于事。 我将 web.xml 会话超时配置为 2 小时,这也有帮助。 在 weblogic 管理控制台中,我尝试将 JTA(java 事务 API)(假设它与所有事务有关)的最大超时设置为 1800 秒,这也有帮助。

如果你们能给我一些指示,我可以尝试解决这个问题的其他方法,我将不胜感激。

PS:根据日志,它是精确到秒的 5 分钟。

2016-12-13 07:52:25,783 INFO [103' for queue: 'weblogic.kernel.Default (self-tuning)'] search.Search.exportData - Starting exportData
2016-12-13 07:57:25,787 INFO ['72' for queue: 'weblogic.kernel.Default (self-tuning)'] search.Search.exportData - Starting exportData
2016-12-13 08:02:25,784 INFO [101' for queue: 'weblogic.kernel.Default (self-tuning)'] search.Search.exportData - Starting exportData

问题是,如果该 Web 服务的持续时间超过 5 分钟,我的 Web 服务每 5 分钟就会被调用一次。让我用一个例子来解释一下:

@ Time 0 minutes : UI calls a webservice : /exportData  (lets say this api typically takes 16 minutes to complete)
@ Time 5th minute : /exportData gets invoked again with no interation from UI. Nor there is a trace in UI network which says UI called this webservice.
@ Time 10th minute : /exportData gets invoked again
@ Time 15th minute : /exportData gets invoked again

所以最后在 15.1 分钟,将有 4 个 exportData 实例并行运行。我曾尝试增加 ajax 请求中的超时和 web.xml 中的会话超时和其他内容,但都没有解决问题。

如果 exportData 恰好在 5 分钟内完成,则不会有任何后续调用。问题是如果该特定调用花费超过 5 分钟,应用程序不应重新调用 Web 服务,我只想找出配置 5 分钟超时的位置。

我已经尝试将 ajax.timeout 全局设置为 2 小时,web.xml 会话超时设置为 2 小时。将 weblogic JTA 超时更改为 30 分钟。但它没有帮助。

【问题讨论】:

  • 我不清楚问题是什么。您是否想弄清楚调用 Web 服务的代码是什么?您是否想弄清楚为什么请求需要 5 分钟才能完成?您能否修改您的问题并在其末尾添加一个实际问题,并重述您认为的问题所在?
  • 嗨,Brian,我已经更新了问题陈述。

标签: java ajax web-services rest weblogic-10.x


【解决方案1】:

想到了一些事情...如果您确定是您的 web 应用发出调用,请使用 Firebug 或 Chrome 开发工具并在它调用您的 web 服务的位置设置断点,然后使用堆栈跟踪回溯并计算找出触发它的原因(大概每 5 分钟一次)。

我在这里假设一些事情......对 web 服务的调用是否会启动工作并且它不需要结果?

我认为您可能想要做的是在服务器端代码中放置一些东西,以跟踪导出是否已经在运行,并且当调用进入 Web 服务时,它首先检查它是否已经在运行,如果是,它不再运行它。如果 webapp 确实查看了结果,您的 web 服务可能只会返回一条消息,例如“export already running”。

【讨论】:

  • 嗨,Brian,exportData api 完成后,它将推送一个可下载的 Excel 文件。我认为上述方法可能对我不起作用,因为用户可能会通过不同的浏览器会话多次调用此 API,在这种情况下,它会返回抱怨导出已在进行中,但行为应该是它应该同时处理多个请求。虽然我可以将会话 ID 维护为唯一 ID 静态数据并比较但相同的浏览器 - 新选项卡将提供相同的会话 ID
  • 啊。好的,这是很好的信息(你应该把它放在问题中:))...好的,另一个想法...将导出的 Excel 写入本地文件。当请求导出它时,只需在文件系统上提供 Excel 文件。您可以拥有自己的进程服务器端,定期(每 5 分钟、30 分钟等)更新文件,因此无论谁请求导出,他们都会立即获得文件。
  • 我已经将内容写入系统上的临时文件。但问题是我将无法区分来自同一浏览器选项卡的重复命中或来自另一个选项卡(浏览器选项卡)的新请求命中,因为会话 ID 相同,因此 API 可能会将新请求视为重复请求并提供服务一个错误的文件。
  • 我假设每个人的文件都是一样的 - 你是说它因谁要求而不同?
  • 是的文件会根据它收到的参数而有所不同。根据参数,它将从数据库中获取内容并构造一个电子表格,该电子表格返回给被调用的用户。
猜你喜欢
  • 2011-06-23
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 2015-09-08
  • 2013-11-29
  • 1970-01-01
相关资源
最近更新 更多