項目中遇到了, Feign 調用微服務超時的問題,而調用的方法返回值為 void, 所以這種情況:如果非必要等待執(zhí)行方法成功,則可以使用 spring 注解 @Async, 完美解決超時問題,從而程序可以正常執(zhí)行
異步與同步的區(qū)別
同步就是整個處理過程順序執(zhí)行泊藕,當各個過程都執(zhí)行完畢低飒,并返回結果屿聋。 異步調用則是只是發(fā)送了調用的指令谈跛,調用者無需等待被調用的方法完全執(zhí)行完畢;而是繼續(xù)執(zhí)行下面的流程刽沾。
@Async介紹
在Spring中读处,基于@Async標注的方法,稱之為異步方法猜惋;這些方法將在執(zhí)行的時候丸氛,將會在獨立的線程中被執(zhí)行,調用者無需等待它的完成著摔,即可繼續(xù)其他的操作缓窜。
基于Java配置的啟用方式
@Service
@EnableAsync
public class SyncServiceImpl {...}
代碼中異步調用無返回值的使用方式
@Service
@EnableAsync
public class SyncServiceImpl {
@Async
public void syncTest() {
AtomicInteger page = new AtomicInteger(0);
while (true) {
if (page.page.get() == 50) {
break;
}
logger.info("<sync> 第" + page + "頁...");
page.addAndGet(1);
}
logger.info("<sync> 異步結束");
}
}