【问题标题】:How to run a thread inside a webservice如何在 Web 服务中运行线程
【发布时间】:2010-02-28 05:29:19
【问题描述】:

有人可以帮我解决这个问题吗?

我使用axis2、apache 和tomcat 创建了简单的Web 服务。此 Web 服务有一个队列,用于保存从客户端发送的 xml 文件,因此每当客户端调用 Web 服务上的方法时,Web 服务都会将此 xml 加载到其队列中。现在我想在 web 服务中运行一个线程来监控这个队列,如果队列中有项目,就采取一些行动。

但我的问题是只有当客户端调用其接口上的方法之一时才会调用 Web 服务。但我需要这个线程在 webserbice 上运行。有人能告诉我有没有办法做到这一点?

当客户端调用 Web 服务上的方法时,它不会考虑之前的方法调用。这意味着它不会跟踪队列中的数据,每次调用它都会创建新队列。

【问题讨论】:

  • 你的描述不够清楚。

标签: java tomcat web-services multithreading axis2


【解决方案1】:

如果您需要 Web 应用程序中的后台线程,您必须在 web.xml 中注册的 ContextListener 中管理它们。然后,当您的 Web 应用程序启动和停止时,您会收到通知。

【讨论】:

    【解决方案2】:

    听起来像是 JMS/消息驱动 bean 的完美用例。 Spring JMS 无需使用成熟的 J2EE 容器即可提供这些设施,因此 Tomcat 将适合这里。 Active MQ可以提供消息引擎。

    本质上,您的 Web 服务会将消息放在队列中,而消息驱动的 bean(或消息驱动的 pojo)会将它们从队列中读取并处理。使用 JMS 的优势在于,如果服务器上的负载增长,您可以重新配置消息驱动 bean 以位于单独的主机上。这也意味着您可以轻松迁移到不同的应用服务器,因为 JMS 是一种标准化的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-23
      • 2019-10-12
      • 2013-09-02
      • 2010-11-04
      • 2016-11-27
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      相关资源
      最近更新 更多