在我目前的項目中,接口調用通過MQ收發json報文消息來執行接口的調用,遇到了個問題,就是在發消息之前落地的數據需要在接收消息之後調用的接口中需要再次查詢,於是出現了一個問題,查詢時查不到那條數據,分析原因:接收消息後的查詢動作,因爲網絡延遲等原因,在數據庫數據落地之前進行,於是造成了落地與查詢的順序顛倒。
解決方案:收到消息後延時調用接口(無法根本解決此問題),但是還是提一下。
添加依賴:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.0</version>
</dependency>
實現代碼:(定時器)執行一次,延時2000ms加載。
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1,
new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());
executorService.schedule(new Runnable() {
@Override
public void run() {
//執行的接口
}
},2000,TimeUnit.MILLISECONDS);
此方法肯定不是完美解決的方法,假設網絡延遲超過了2000ms,那一樣還是會造成上述問題,後續再思考下解決方案,再做更新