如何为压碎的服务器

时间:2018-03-22 18:49:56

标签: java distributed-system

我正在分发课程。现在,我想在客户端发送或接收来自压碎服务器的数据时设置超时,并让它与可用服务器重新连接。我想在这里添加一些东西让客户意识到时间已经足够长了。 sendMessage(new TextMessage(kvjson)); TextMessage resultMsg = receiveMessage();

我想在这里使用一个线程就像一个计数器,当时间结束时,只需跳过up语句。但我意识到如果有一个被压碎的服务器,客户端可能只是卡在方法内部并且永远不会返回。另外,我不知道主进程如何知道我的超时头已经完成。我认为它与中断和睡眠有关?检查在线来源后,我仍然感到困惑。所以我在这里发布。 感谢您的回答和患者提前!

1 个答案:

答案 0 :(得分:0)

您可以将客户端调用包装在自己的线程中,并使用Future对象等待响应。 Future对象将等待你想要的时间,并且可以在一段时间后超时。然后,您可以处理超时。见下面的例子。

    ExecutorService executor = Executors.newSingleThreadExecutor();
    Future<String> future = executor.submit(() -> {

        //long running process
        TimeUnit.SECONDS.sleep(10);
        return "finished";
    });

    try {
        future.get(5, TimeUnit.SECONDS);
    } catch (Exception e) {
        //deal with the timeout
    }