赞
踩
org.springframework.boot
spring-boot-starter-amqp
我们在application.yml中添加一些有关RabbitMQ的配置:
spring:
rabbitmq:
host: 192.168.206.66
username: leyou
password: 123321
virtual-host: /leyou
template:
retry:
enabled: true
initial-interval: 10000ms
max-interval: 300000ms
multiplier: 2
exchange: ly.item.exchange
publisher-confirms: true
template:有关AmqpTemplate
的配置
retry:失败重试
enabled:开启失败重试
initial-interval:第一次重试的间隔时长
max-interval:最长重试间隔,超过这个间隔将不再重试
multiplier:下次重试间隔的倍数,此处是2即下次重试间隔是上次的2倍
exchange:缺省的交换机名称,此处配置后,发送消息如果不指定交换机就会使用这个
publisher-confirms:生产者确认机制,确保消息会正确发送,如果发送失败会有错误回执,从而触发重试
@Autowired
private AmqpTemplate amqpTemplate;
private void sendMessage(Long id, String type){
// 发送消息
try {
this.amqpTemplate.convertAndSend( type, id);
} catch (Exception e) {
}
}
ly.item.exchange
注意:这里要把所有异常都try起来,不能让消息的发送影响到正常的业务逻辑
@Transient
public void saveGoods(Spu spu) {
//新增SPU
spu.setId(null);
spu.setCreateTime(new Date());
spu.setLastUpdateTime(spu.getCreateTime());
spu.setSaleable(true);
spu.setValid(false);//设置默认不删除
int count = spuMapper.insert(spu);
if(count != 1){
throw new LyException(ExceptionEnum.GOODS_SAVE_ERROR);
}
//新增spu_detail
SpuDetail spuDetail = spu.getSpuDetail();
spuDetail.setSpuId(spu.getId());//spu新增完善会回显,然后就有spu.getId())
spuDetailMapper.insert(spuDetail);
saveSkuAndStock(spu);
sendMessage(spu.getId(),“item.insert”);
}
@Transactional
public void updateGoods(Spu spu) {
if(spu.getId() == null){
throw new LyException(ExceptionEnum.GOODS_UPDATE_ERROR);
}
//删除SKU
Sku sku = new Sku();
sku.setSpuId(spu.getId());
//查询sku
List skuList = skuMapper.select(sku);
if(!CollectionUtils.isEmpty(skuList)){
//删除sku
skuMapper.delete(sku);
//skuList.stream().map(Sku::getId).collect(Collectors.toList());
//代码解析.stream()将集合转换为流,map将集合当中的的所有id取出转换为集合
// 删除stock
List ids = skuList.stream().map(Sku::getId).collect(Collectors.toList());
stockMapper.deleteByIdList(ids);
}
//修改spu
spu.setValid(null);//是否有效设置为空
spu.setSaleable(null);
spu.setLastUpdateTime(new Date());
spu.setLastUpdateTime(null);
int count = spuMapper.updateByPrimaryKeySelective(spu);
if(count != 1){
throw new LyException(ExceptionEnum.GOODS_UPDATE_ERROR);
}
//修改detail
count = spuDetailMapper.updateByPrimaryKeySelective(spu.getSpuDetail());
if(count != 1){
throw new LyException(ExceptionEnum.GOODS_UPDATE_ERROR);
}
//新增sku和stock
saveSkuAndStock(spu);
//发送mq消息
sendMessage(spu.getId(),“item.update”);
}
搜索服务接收到消息后要做的事情:
增:添加新的数据到索引库
删:删除索引库数据
改:修改索引库数据
因为索引库的新增和修改方法是合二为一的,因此我们可以将这两类消息一同处理,删除另外处理。
org.springframework.boot
spring-boot-starter-amqp
spring:
rabbitmq:
host: 192.168.206.66
username: leyou
password: leyou
virtual-host: /leyou
这里只是接收消息而不发送,所以不用配置template相关内容。
package com.leyou.search.mq;
import com.leyou.search.service.SearchService;
import org.springframework.amqp.core.ExchangeTypes;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
多做面试题,复习巩固。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
[外链图片转存中…(img-RmeczeSM-1712251064140)]
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。