我正在尝试向Java中的步骤添加重试逻辑。使用计时器,我可以在一定时间后重复此步骤。但是,如果未成功执行该步骤,计时器将等待直到执行停止。我的要求是,我需要在30秒后停止执行此步骤,然后重试此逻辑。
下面是我想做的。
步骤说明:我将通过提供Json输入来调用processRequest方法。每次都会成功执行此步骤,并返回作业ID。我正在轮询一个URL,以获取对提供的作业ID的响应。此步骤有时无法成功执行,或花费大量时间返回响应。我想终止该轮询任务,然后再次尝试调用processRequest,这将生成一个新的作业ID,并且必须将其发送以进行轮询。等待30秒后,该逻辑必须执行5次。
Json request={operation:resize};
String JOBID=processRequest(request);
String response=http://pollingUrl/JOBID;
我可以在不将我的类扩展到Thread类的情况下执行此操作吗,或者请建议是否还有其他方法可以实现相同的目的。
我正在寻找这样的东西:
String response="";
Int count=5;
While (count>0)
{
String JOBID=processRequest(request);
String response=http://pollingUrl/JOBID; // terminate step after 30s
If response !="";
Return response; // return response and stop the while loop.
}
答案 0 :(得分:1)
一种可能的方法是使用Thread.sleep()
。假设您不介意将程序锁定30秒钟,则可以执行以下操作:
String response="";
int count=5;
While (count>0) {
String JOBID=processRequest(request);
String response=http://pollingUrl/JOBID;
if (!response.equals("")) {
return response; // return response and stop the while loop.
}
try {
Thread.sleep(6000); // 6 seconds
} catch (InterruptedException ie) {}
count--;
}
请注意,除非http轮询调用是非阻塞的,否则以上操作将无效。就是说,如果它在内部等待直到提供响应,它将无法工作。但是通常在进行轮询呼叫时,应该有某种机制可以在某个时刻超时。
编辑:我改变了两件事。我在测试后 进入睡眠状态以寻求回应。我修改了您测试相等性的方式(这可能是问题的一部分)。使用equals
而非==
或!=
来比较字符串。