2.16. 异步作业服务 RESTEasy
RESTEasy 异步作业服务旨在为 HTTP 协议添加异步行为。HTTP 是同步协议,但知道异步调用。HTTP 1.1 响应代码 202 Accepted 表示服务器已经接收并接受响应来处理,但处理尚未完成。围绕此构建异步作业服务。
2.16.1. 启用异步作业服务 复制链接链接已复制到粘贴板!
在 web.xml 文件中启用异步作业服务:
<context-param>
<param-name>resteasy.async.job.service.enabled</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>resteasy.async.job.service.enabled</param-name>
<param-value>true</param-value>
</context-param>
2.16.2. 配置异步作业 复制链接链接已复制到粘贴板!
本节涵盖使用 RESTEasy 的异步作业的查询参数示例。
基于角色的安全性无法在异步作业服务中使用,因为它无法移植实施。如果使用异步作业服务,则应用程序安全性必须通过 web.xml 文件中的 XML 声明来实现。
虽然 GET、DELETE 和 PUT 方法可以异步调用,但这破坏了这些方法的 HTTP 1.1 合同。虽然这些调用如果多次调用,可能无法更改资源的状态,但它们会在每次调用时将服务器的状态更改为新作业条目。
asynch 查询参数用于在后台运行调用。将返回 202 接受 的响应,以及位置标头,其 URL 指向后台方法的响应位置。
POST http://example.com/myservice?asynch=true
POST http://example.com/myservice?asynch=true
上面的示例返回了 202 接受 的响应。它还返回一个位置标头,其 URL 指向后台方法的响应位置。位置标头的示例如下所示:
HTTP/1.1 202 Accepted Location: http://example.com/asynch/jobs/3332334
HTTP/1.1 202 Accepted
Location: http://example.com/asynch/jobs/3332334
URI 采用以下形式:
/asynch/jobs/{job-id}?wait={milliseconds}|nowait=true
/asynch/jobs/{job-id}?wait={milliseconds}|nowait=true
GET、POST 和 DELETE 操作可以在此 URL 上执行。
-
GET 返回作为响应(如果作业完成)调用的 Jakarta RESTful Web Services 资源方法。如果作业还没有完成,GET 将返回
202 Accepted响应代码。调用 GET 不会删除作业,因此可以多次调用。 - POST 对作业响应进行读取,并在作业完成后删除作业。
- 调用 DELETE 来手动清理作业队列。
当作业队列已满时,它会自动从内存中驱除最早的作业,而无需调用 DELETE。
GET 和 POST 操作允许使用 wait 和 nowait 查询参数来定义最长等待时间。如果未指定 wait 参数,则操作将默认为 nowait=true,如果作业未完成,则根本不等待。wait 参数以毫秒为单位定义。
POST http://example.com/asynch/jobs/122?wait=3000
POST http://example.com/asynch/jobs/122?wait=3000
RESTEasy 支持使用 单 向查询参数来触发和忘记作业。
POST http://example.com/myservice?oneway=true
POST http://example.com/myservice?oneway=true
上面的示例返回 202 Accepted 响应,但没有创建作业。
异步作业服务的配置参数可在附录的 RESTEasy Asynchronous Job Service Configuration Parameters 部分中找到。