静态页实时同步

124 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

每日英语:

Experience is the name everyone gives to their mistakes.

翻译:人们给自己犯过的错取名叫经验。 ——奥斯卡·王尔德

1.静态页同步分析

静态页同步,我们可以在监听sku表变化,一旦发生变更,可以直接通过feign调用实现静态页生成和删除。

2.静态页实时更新

2.1 Feign

创建mall-page-api工程,并创建Feign接口com.xz.mall.page.feign.PageFeign实现生成静态页调用,代码如下:

@FeignClient(value = "mall-web-page")
public interface PageFeign {
​
    /***
     * 生成静态页
     */
    @GetMapping(value = "/page/{id}")
    RespResult html(@PathVariable(value = "id")String id) throws Exception;
}

2.2Canal监听调用

mall-canal-service中监听调用,修改com.xz.canal.listener.SkuHandler的add和update方法,增加feign接口调用,代码如下:

@Component
public class SkuHandler implements EntryHandler<Sku>{
​
    @Autowired
    private SkuSearchFeign skuSearchFeign;
​
    @Autowired
    private PageFeign pageFeign;
​
    /***
     * 增加产品
     * @param sku
     */
    @SneakyThrows
    @Override
    public void insert(Sku sku) {
        if(sku.getStatus().intValue()==1){
            //导入索引
            skuSearchFeign.add(JSON.parseObject(JSON.toJSONString(sku), SkuEs.class));
        }
        //生成静态页
        pageFeign.html(sku.getSpuId());
    }
​
    /***
     * 修改
     * @param before
     * @param after
     */
    @SneakyThrows
    @Override
    public void update(Sku before, Sku after) {
        if(after.getStatus().intValue()==2){
            //导入索引
            skuSearchFeign.del(after.getId());
        }else{
            skuSearchFeign.add(JSON.parseObject(JSON.toJSONString(after), SkuEs.class));
        }
​
        //生成静态页
        pageFeign.html(after.getSpuId());
    }
​
    /***
     *
     * @param sku
     */
    @Override
    public void delete(Sku sku) {
        skuSearchFeign.del(sku.getId());
    }
}

不要忘记在主方法上添加@EnableFeignClients

@EnableFeignClients(basePackages = {"com.xz.mall.goods.feign","com.xz.mall.search.feign","com.xz.mall.page.feign"})

以后但凡出现如下错误,都不要过度担心,这种情况都是对象名字的重复,整个工程里即便null也是一个重复对象,这种情况我们允许覆盖重复名字即可。 1604213113394.png

在bootstrap.yml中添加如下配置:

  main:
    allow-bean-definition-overriding: true

总结

本篇主要讲述了一下静态页实时同步的一些操作,静态页同步分析和静态页实时更新中的Feign编写和Canal监听调用中的代码具体编写。