gpt4 book ai didi

java - 休息服务: prevent concurrent invocations per user

转载 作者:行者123 更新时间:2023-11-30 06:31:16 26 4
gpt4 key购买 nike

我正在开发一个 REST 服务(使用 RESTeasy),该服务执行繁重的计算并生成大量结果(将下载到文件中)。为了保护系统,我们决定通过防止并发调用来限制同一用户的执行。

我想在 session 中放置一个变量,如下所示:

//check if service is running before execution
if (Boolean.parseBoolean((String) session.getAttribute("isRunning"))) {
throw new WebApplicationException(Response.status(
Response.Status.FORBIDDEN).entity("Service is currently running!").build());
}

//on execution
session.setAttribute("isRunning", "true");

//after execution
finally {
session.setAttribute("isRunning", "false");
}

但这会限制每个 session 的使用量,不限制每个用户

最佳答案

你走在正确的道路上。

在 session 中存储一个集合(我将其称为 UserSet)。

当您收到请求时,执行以下操作:

  1. 识别用户。
  2. 应用程序范围获取UserSet。
  3. 在 UserSet 上同步。
  4. 检查用户是否已在 UserSet 中。
  5. 如果是,则短路请求并退出 Web 服务调用。
  6. 如果否,请将用户添加到 UserSet。
  7. 退出同步块(synchronized block)。
  8. 执行长时间运行的操作。
  9. 在 UserSet 上同步。
  10. 从集合中删除用户。

编辑:根据 John Wu 评论更正范围。

关于java - 休息服务: prevent concurrent invocations per user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46059268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com