商品上下架RocketMQ同步实现
商品的上下架,改造一下,我们的GoodsService里的代码,
@Autowired
private RocketMQTemplate rocketMQTemplate;
/**
* 修改上下架的状态
*
* @param spuId
* @param saleable
* @return
*/
@Transactional
public void updateSaleable(Long spuId, Boolean saleable) {
TbSpu tbSpu = new TbSpu();
tbSpu.setId(spuId);
tbSpu.setSaleable(saleable);
boolean bSpuUpdate = spuService.updateById(tbSpu);
if(!bSpuUpdate){
throw new LyException(ExceptionEnum.UPDATE_OPERATION_FAIL);
}
UpdateWrapper<TbSku> updateWrapper = new UpdateWrapper<>();
updateWrapper.lambda().set(TbSku::getEnable,saleable).eq(TbSku::getSpuId,spuId);
boolean bSkuUpdate = skuService.update(updateWrapper);
if(!bSkuUpdate){
throw new LyException(ExceptionEnum.UPDATE_OPERATION_FAIL);
}
//发送 消息 ,消息内容是spuid
String tag = saleable ? ITEM_UP_TAGS : ITEM_UP_TAGS;
System.err.println("+++++++++++"+tag+spuId+"+++++++++++");
rocketMQTemplate.convertAndSend(ITEM_TOPIC_NAME+":"+tag,spuId);
}
使用了RocketMQ
来异步发送mq消息,传过去商品的id,搜索微服务在创建消费者去消费上下架的信息,上架是用了feign组件去调用商品微服务获取商品消息再进行插入elasticsearch索引库中,下架用了商品的id,去删除索引库中的信息。
流程图如下: