Java 如何处理基于事件的异步服务通信的超时?
我得到了服务1,服务2和这些服务通过卡夫卡通信。当我从Service1向Service2发送请求时,我需要确保Service1必须在10秒内从Service2获得响应。如果没有,我需要在Service1将请求状态更新为“timeout” 我需要每秒发送数百个请求,我不认为按请求启动计划任务是一种有效的方法。有没有其他方法来处理超时情况Java 如何处理基于事件的异步服务通信的超时?,java,architecture,microservices,Java,Architecture,Microservices,我得到了服务1,服务2和这些服务通过卡夫卡通信。当我从Service1向Service2发送请求时,我需要确保Service1必须在10秒内从Service2获得响应。如果没有,我需要在Service1将请求状态更新为“timeout” 我需要每秒发送数百个请求,我不认为按请求启动计划任务是一种有效的方法。有没有其他方法来处理超时情况 void sendRequestToKafka(){ //Send request to Kafka Runnable checkRequest
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的列,并检查传入响应是否在要求的时间内到达。定期检查和更新请求会更有效率。你能解释一下你之前的说法吗?我不明白你的意思。“你为什么不运行一个作业,定期更新超时运行的作业?”我会这么说。“您必须对每个传入的响应进行额外验证”我已经得到了这样的控制。