Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理基于事件的异步服务通信的超时?_Java_Architecture_Microservices - Fatal编程技术网

Java 如何处理基于事件的异步服务通信的超时?

Java 如何处理基于事件的异步服务通信的超时?,java,architecture,microservices,Java,Architecture,Microservices,我得到了服务1,服务2和这些服务通过卡夫卡通信。当我从Service1向Service2发送请求时,我需要确保Service1必须在10秒内从Service2获得响应。如果没有,我需要在Service1将请求状态更新为“timeout” 我需要每秒发送数百个请求,我不认为按请求启动计划任务是一种有效的方法。有没有其他方法来处理超时情况 void sendRequestToKafka(){ //Send request to Kafka Runnable checkRequest

我得到了服务1,服务2和这些服务通过卡夫卡通信。当我从Service1向Service2发送请求时,我需要确保Service1必须在10秒内从Service2获得响应。如果没有,我需要在Service1将请求状态更新为“timeout”

我需要每秒发送数百个请求,我不认为按请求启动计划任务是一种有效的方法。有没有其他方法来处理超时情况

void sendRequestToKafka(){
    //Send request to Kafka

    Runnable checkRequestCompleted = () -> {
        //Check request has a response from database
        //If not update request status to timeout
    };

    ScheduledExecutorService executorService= Executors.newScheduledThreadPool(4);
    executorService.schedule(checkRequestCompleted, 10, TimeUnit.SECONDS);

}
数据库模式

id|request|response|status(started, timeout, completed)

为什么不运行一个作业,定期更新超时运行的作业?此外,如果必须严格满足要求,则必须另外验证每个传入响应是否在要求的时间范围内到达(在服务1中处理之前)。@Glains我已经得到了一个类似requestSendDate的列,并检查传入响应是否在要求的时间内到达。定期检查和更新请求会更有效率。你能解释一下你之前的说法吗?我不明白你的意思。“你为什么不运行一个作业,定期更新超时运行的作业?”我会这么说。“您必须对每个传入的响应进行额外验证”我已经得到了这样的控制。