开发中会有场景需要对接第三方系统.第三方系统往往会提供一个中间库,然后我们系统读取中间库的数据,然后经过一系列的逻辑,把数据存到自己系统中. 在这里分享一种通过生产者,消费者模式进行数据同步,接近实时
主要思路: 一个生产者线程, 实时去中间库查询没有同步的数据.多个消费者,消费生产者生产的数据
1.一个生产者线程, 实时去中间库查询没有同步的数据
2.使用消费者对生产者生产的数据进行同步
3.记录下处理完成/处理失败的同步记录
/**
* 同步中间库生产者.从中间库中查询数据
*/
public class Producer implements Runnable {
private OwnerMiddleQueryService queryService;//查询中间库Service,可考虑抽成接口
private LinkedBlockingQueue<Runnable> consumers;//消费者队列
private ThreadPoolExecutor executor;//线程池
public Producer(OwnerMiddleQueryService queryService, LinkedBlockingQueue<Runnable>
consumers, ThreadPoolExecutor executor) {
this.queryService = queryService;
this.consumers = consumers;
this.executor = executor;
}
@Override
public void run() {
while (true){
List<OwnerMiddle> datas = queryS