6 同步数据
6.1 索引库同步
当tb_sku
秒杀商品发生变化时,我们应该同时变更索引库中的索引数据,比如秒杀商品增加,则需要同步增加秒杀商品的索引,如果有秒杀商品删除,则需要同步移除秒杀商品。
修改seckill-canal
中的com.seckill.handler.SkuHandler
的增删改方法,代码如下:
@Component
@CanalTable(value = "tb_sku")
public class SkuHandler implements EntryHandler<Sku> {
@Autowired
private SkuInfoFeign skuInfoFeign;
/***
* 增加数据
* @param sku
**/
@Override
public void insert(Sku sku)
{
//将Sku转换成SkuInfo
SkuInfo skuInfo = JSON.parseObject( JSON.toJSONString(sku) ,SkuInfo.class);
//同步索引
skuInfoFeign.modify(1,skuInfo);
}
/***
* 修改数据
* @param before
* @param after
* */
@Override
public void update(Sku before, Sku after)
{
int type=2; //将Sku转换成SkuInfo
SkuInfo skuInfo = JSON.parseObject( JSON.toJSONString(after) ,SkuInfo.class);
if(skuInfo.getStatus()==1 || after.getSeckillNum()<=0)
{
//商品变成了普通商品,或者商品库存为0,则需要删除索引数据
type=3;
}
//同步索引
skuInfoFeign.modify(type,skuInfo);
} /***
* 删除数据
* @param sku
* */
@Override public void delete(Sku sku) { //将Sku转换成SkuInfo
SkuInfo skuInfo = JSON.parseObject( JSON.toJSONString(sku) ,SkuInfo.class);
//同步索引
skuInfoFeign.modify(3,skuInfo);
}
}
开启Feign功能:@EnableFeignClients(basePackages = {"com.seckill.search.feign"})
此时对数据库中tb_sku
表进行增删改的时候,会同步到索引库中。
6.2 静态页同步
只需要添加Feign包,注入SkuPageFeign,根据增删改不同的需求实现生成静态页或删除静态页。修改SkuHandler
,代码如下:
@Component
@CanalTable(value = "tb_sku")
public class SkuHandler implements EntryHandler<Sku> {
@Autowired
private SkuInfoFeign skuInfoFeign;
@Autowired
private SkuPageFeign skuPageFeign;
/***
* 增加数据
* @param sku
*/
@SneakyThrows
@Override
public void insert(Sku sku) {
//将Sku转换成SkuInfo
SkuInfo skuInfo = JSON.parseObject( JSON.toJSONString(sku) ,SkuInfo.class);
//同步索引
skuInfoFeign.modify(1,skuInfo);
//生成静态页
skuPageFeign.html(sku);
}
/***
* 修改数据
* @param before
* @param after
*/
@SneakyThrows
@Override
public void update(Sku before, Sku after) {
int type=2;
//将Sku转换成SkuInfo
SkuInfo skuInfo = JSON.parseObject( JSON.toJSONString(after) ,SkuInfo.class);
if(skuInfo.getStatus()==1 || after.getSeckillNum()<=0){
//商品变成了普通商品,或者商品库存为0,则需要删除索引数据
type=3;
}
//同步索引
skuInfoFeign.modify(type,skuInfo);
if(type==3){
//删除静态页
skuPageFeign.delHtml(after.getId());
}else{
//生成静态页
skuPageFeign.html(after);
}
}
/***
* 删除数据
* @param sku
*/
@SneakyThrows
@Override
public void delete(Sku sku) {
//将Sku转换成SkuInfo
SkuInfo skuInfo = JSON.parseObject( JSON.toJSONString(sku) ,SkuInfo.class);
//同步索引
skuInfoFeign.modify(3,skuInfo);
//删除静态页
skuPageFeign.delHtml(sku.getId());
}
}
同时不要忘了添加feign包:
@EnableFeignClients(basePackages={"com.seckill.search.feign","com.seckill.page.feign"})
测试的时候,在数据对数据进行增删改,静态页也会同步操作。