2014-10-27 84 views
3

我有以下情形:如何知道如果Web服务已经开始

  • 有托管在JBoss Web服务。
  • Web服务由java应用程序使用。

现在一般的启动情况是:

  • JBOSS启动并加载Web应用程序。
  • 然后启动该应用程序并使用该Web服务。

现在的问题:

如果Java应用程序启动第一,有没有什么办法让它知道,Web服务已经开始了吗?

我想到了定期对web服务进行ping操作,但是这可能会让一些开销变得安静。任何解决方案都是受欢

+0

它是肥皂还是休息风格? – user1346316 2014-10-27 07:22:07

+0

只是尝试使用它。如果它不在那里,你会得到适当的例外。 – EJP 2014-10-27 08:34:35

+0

是休息的样式。 – 2014-10-27 08:38:24

回答

0

定期“ping”web服务并不是一个很大的开销。为什么会这样?

稍等一会再试。一种常见的策略是增加尝试达到最大值之间的等待时间。例如。尝试,如果还没有准备好,等待1秒,然后再试一次,如果还没有准备好,请等待2秒,然后等待4秒钟,直到最多8秒重试。

同时显示一条消息,喜欢的用户:

"Waiting for web service to start..." 

可选,包括尝试迄今取得像数:

"Waiting for web service to start... (retrying #2)" 

也或者你可以做一个小的,静态的文本文件可用作为webapp的一部分,例如“ping.txt”,并尝试将其作为测试应用程序是否已准备好并可用的测试,您不必自己调用Web服务。它也可以指向Servlet,在这种情况下,您可以确保servlet容器也处于启用状态(当然,禁用此ping url的缓存)。

另外,如果您的webservice模块有足够的时间站起来,“ping”的目标可能是web服务的wsdl文档。大多数Web服务框架提供了访问/下载Web服务的动态生成的WSDL文档的方法。如果该URL响应并发回动态WSDL文档,则wsdl模块也会启动。

+0

谢谢。我也有同样的感受,ping是一个简单的解决方案,应该可以正常工作。但我仍然想知道是否有其他办法。你知道像Web服务或其他想法的回应。 似乎我会坚持现在ping。 – 2014-10-27 08:42:16

+0

即使有些测试表示服务已启动,但如果在此之后继续调用它,仍然有可能无法访问,因此没有更好的选择。还添加了另一种替代方法来ping动态wsdl文档。 – icza 2014-10-27 09:05:55

+0

它可能是也可能不是一个开销,但它也不可靠。 ping可能成功,通话失败。或者ping可能失败并且调用成功。因此ping是基本没有意义的。实际召唤的成功或失败是重要的。 – EJP 2014-10-27 09:12:37

1

您必须时刻处理客户端应用程序中的连接问题 - 不仅仅是启动,因此“ping”是没有意义的。这适用于任何类型的远程连接解决方​​案。

当需要调用服务时调用它。如果发生故障,连接将失败,您可以通过适当的方式通知用户。无论您是否ping通,您都必须执行此操作,因为服务可能会在上次ping和实际呼叫之间消失。

当客户端处于活动状态时,远程服务可以上下任意次数。

+0

是的。但是,我如何定期检查连接状态而不ping? – 2014-10-27 09:13:03

+0

你没有。只要尝试在需要时使用该服务。当你不需要它时,你不关心它是否可用,当你需要它时,测试它的唯一可靠的方法就是使用它。 – EJP 2014-10-27 09:17:13

-1

您可以简单地检查日志从var/log /..../ access.log 例如。tail -f /var/log/apache2/access.log

相关问题