在我目前的项目中,接口调用通过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,那一样还是会造成上述问题,后续再思考下解决方案,再做更新