服务器端的 Spring ws 超时 [英] Spring ws timeout on server side

查看:27
本文介绍了服务器端的 Spring ws 超时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 Spring Web 服务公开了一些 Web 服务.

I have some web services exposed using spring web services.

我想在服务器端设置最大超时,我的意思是,当客户端调用我的 Web 服务时,它的持续时间不能超过固定时间.可能吗?

I would like to set a maximun timeout on server side, I mean, when a client invokes my web service It could not last more than a fixed time. Is it possible?

我找到了很多关于客户端超时的信息,但没有找到服务器超时.

I have found lot of information about client timeouts, but not server timeout.

推荐答案

您可以通过使 Web 服务服务器触发另一个线程上的实际工作并自行倒计时并在超时时返回失败来解决此问题.

You can work around this issue by making the web service server trigger the real work on another thread and countdown the time out it self and return failure if timed out.

这是一个如何做的例子,它应该在 10 秒后超时:

Here is an example of how you can do it, it should time out after 10 seconds:

public class Test {
private static final int ONE_SECOND = 1_000;

public String webserviceMethod(String request) {

    AtomicInteger counter = new AtomicInteger(0);
    final ResponseHolder responseHolder = new ResponseHolder();

    // Create another thread
    Runnable worker = () -> {
        // Do Actual work...
        responseHolder.finished = true;
        responseHolder.response = "Done"; // Actual response
    };

    new Thread(worker).start();

    while (counter.addAndGet(1) < 10) {
        try {
            Thread.sleep(ONE_SECOND);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if (responseHolder.finished) {
            return responseHolder.response;
        }
    }

    return "Operation Timeout"; // Can throw exception here
}

private final class ResponseHolder {

    private boolean finished;
    private String response; // Can be any type of response needed
}

}

这篇关于服务器端的 Spring ws 超时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆