持续创作,加速成长!这是我参与「掘金日新计划 · 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也是一个重复对象,这种情况我们允许覆盖重复名字即可。
在bootstrap.yml中添加如下配置:
main:
allow-bean-definition-overriding: true
总结
本篇主要讲述了一下静态页实时同步的一些操作,静态页同步分析和静态页实时更新中的Feign编写和Canal监听调用中的代码具体编写。