gpt4 book ai didi

java - 长期运行的 Web 服务架构

转载 作者:行者123 更新时间:2023-11-30 07:38:27 26 4
gpt4 key购买 nike

我们使用 axis2 来构建我们的网络服务,并使用 Jboss 服务器来运行我们所有应用程序的逻辑。我们被要求构建一个与 bean 对话的 web 服务,该 bean 可能需要长达 1 小时才能响应(取决于请求的大小),因此我们将无法与在此期间打开的消费者保持连接。

我们可以使用异步 web 服务,但效果不是很好,因此我们决定可以实现一个 bean 来执行 web 服务背后的逻辑,并让服务异步调用该 bean。 Web 服务将生成一个 token ,该 token 将传递给消费者,消费者可以使用它来查询请求的状态。

我的问题是:

  1. 从创建该 bean 的服务中的方法返回后,如何在 Jboss 服务器上查询该 bean 的状态。我需要使用有状态 bean 吗?
  2. 如果我想从 Web 服务端进行异步调用,我可以使用有状态 bean 吗?

最佳答案

您可以采用的另一种方法是使用 JMS 和数据库。

过程是

  1. 在 Web 服务调用中,将消息放入 JMS 队列
  2. 向数据库表中插入一条记录,并将该记录的唯一标识返回给客户端
  3. 在监听队列的 MDB 中,调用 bean
  4. 当 bean 返回时,将 DB 记录更新为“完成”状态
  5. 当客户端调用状态时,读取数据库记录,根据记录返回“Not Done”或“Done”。
  6. 当客户端调用,记录显示“Done”时,返回“Done”并删除记录

这个过程在资源使用上有点重,但有一些优势

  • 如果您的 bean 方法抛出异常,持久 JMS 队列将重新交付
  • 如果您的服务器重新启动,持久 JMS 队列将重新交付
  • 通过使用数据库表而不是一些静态数据,您可以支持集群或负载平衡环境

关于java - 长期运行的 Web 服务架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1835652/

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