2
A
回答
4
你得到了更多的建築問題,首先要解決的問題。在單線程程序中,序列通常爲:
- 做的東西;
- Call sendTo();
- 做更多的事情。
你有工作,如果你想要的是:
- 做的東西;
- Call sendTo();
- 如果(2)失敗,請等待10秒鐘並重新發送();
- 如果(3)失敗,則拋出錯誤;
- 做更多的事情。
問題是這仍然是同步的。如果是這樣你需要一個線程。您應該使用Java 5執行程序。
public void sendTo(final String username, final String message) {
if (!internalSendTo(username, message)) {
// attempt resend
ExecutorService exec = Executors.newSingleThreadExecutor();
final AtomicBoolean result = new AtomicBoolean(false);
exec.submit(new Runnable() {
boolean b = internalSendto(username, message);
result.set(b);
});
try {
exec.awaitTermination(10, TimeUnit.SECONDS);
} catch (InterruptedException e) {
// still didn't work
} finally {
exec.shutdownNow();
}
}
}
private boolean internalSendTo(String username, String message) {
Userdata user = findUser(username);
boolean success = false;
if (user != null) {
Out out = new Out(user.getClientSocket());
// do the communication here
success = true;
}
return success;
}
現在,這只是它如何工作的粗略草圖。但是,它應該讓你對這個問題有所瞭解。
你想這還是你想:
- 做的東西;
- Call sendTo();
- 如果(2)失敗,排隊發送並繼續;
- 做更多的事情。
基本上這是異步方法。如果你走這條路你就必須回答這樣的問題:
- 發生什麼情況,如果超過10秒(或某個任意的間隔)後,它仍然沒有奏效?
- 哪些進程嘗試sendTo()調用?
- 如果他們阻止/死亡會怎麼樣?
- 我需要多個發件人嗎?
- 等
基本上它變得複雜得多。
0
我會推薦使用AOP和Java註釋。從jcabi-aspects嘗試讀取製造機制:
@RetryOnFailure(attempts = 3)
public void sendTo(String username, String message) {
// try to do it
}
2
你確切的情況,使用Failsafe:
RetryPolicy retryPolicy = new RetryPolicy()
.retryWhen(null)
.withMaxRetries(2)
.withDelay(10, TimeUnit.SECONDS);
Userdata user = Failsafe.with(retryPolicy).get(() -> findUser(username));
它沒有得到任何簡單。告訴你的朋友:)
相關問題
- 1. ADFS在特定時間段後重新驗證MVC請求
- 2. 如何在春季的特定時間後執行功能?
- 3. 如何在特定時間後運行功能
- 4. 在特定時間發送Http請求
- 5. 將中間件功能應用於特定請求
- 6. 在特定時間後重定向
- 7. 超時後重試ajax請求
- 8. 如何調用每個Ajax請求的特定功能
- 9. 如何讓Web請求等待特定時間間隔?
- 10. 在特定時間執行功能
- 11. 在特定的時間執行功能
- 12. 如何在短時間內無線程鎖定多個ajax請求的功能
- 13. 如何在一定的時間內阻止api重複請求
- 14. 如何在一定時間後停止處理請求的tomcat?
- 15. Firebase Cloud功能在特定時間後自動刪除數據
- 16. AngularJS - 爲一定時間後POST請求
- 17. 尋求與特定功能
- 18. 如何在時間到達特定時間時觸發某個功能
- 19. 如何在特定時間和日期運行某個功能?
- 20. Angular:如何在post/put請求成功後獲取請求?
- 21. 如何在symfony2功能測試中製作https請求?
- 22. 錯誤何時成爲功能請求?
- 23. 如何在特定時間重試芹菜任務?
- 24. Python請求 - 重新驗證後的重試請求
- 25. QT,運行特定時間的功能
- 26. 如何檢查特定日期的特定時間段內是否有請求?
- 27. Laravel:如何重定向到控制器的功能和使用視圖的請求::使在同一時間?
- 28. 如何使用後的「請求」功能在Firefox中 - 附加SDK
- 29. 如何在給定時間後執行某個功能?
- 30. 如何在給定時間後激活某個功能?
我只想讓它工作 – lemon 2009-10-22 03:07:10
這很好,但程序不寫自己。 – cletus 2009-10-22 03:09:17
是的,你說得對,我會去研究執行者。 TY – lemon 2009-10-22 03:10:10