JAVA全系列 教程
3762个小节阅读:7094k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
添加RabbitMQ起步依赖
xxxxxxxxxx
<!-- rabbitmq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
添加RabbitMQ相关配置
xxxxxxxxxx
spring:
# 数据源
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///baizhanshopping?serverTimezone=UTC
username: root
password: root
# rabbitmq
rabbitmq:
host: 192.168.0.159
port: 5672
username: guest
password: guest
virtual-host: /
编写配置文件,创建交换机和队列
xxxxxxxxxx
@Configuration
public class RabbitConfig {
// 交换机
private final String GOODS_EXCHANGE = "goods_exchange";
// 同步商品数据队列
private final String SYNC_GOODS_QUEUE = "sync_goods_queue";
// 删除商品数据队列
private final String DEL_GOODS_QUEUE = "del_goods_queue";
// 创建交换机
@Bean(GOODS_EXCHANGE)
public Exchange getExchange() {
return ExchangeBuilder
.topicExchange(GOODS_EXCHANGE) // 交换机类型
.durable(true) // 是否持久化
.build();
}
// 创建队列
@Bean(SYNC_GOODS_QUEUE)
public Queue getQueue1() {
return new Queue(SYNC_GOODS_QUEUE); // 队列名
}
@Bean(DEL_GOODS_QUEUE)
public Queue getQueue2() {
return new Queue(DEL_GOODS_QUEUE); // 队列名
}
// 交换机绑定队列
@Bean
public Binding bindQueue1(@Qualifier(GOODS_EXCHANGE) Exchange exchange,
@Qualifier(SYNC_GOODS_QUEUE) Queue queue) {
return BindingBuilder
.bind(queue)
.to(exchange)
.with("#.sync_goods.#")
.noargs();
}
@Bean
public Binding bindQueue2(@Qualifier(GOODS_EXCHANGE) Exchange exchange,
@Qualifier(DEL_GOODS_QUEUE) Queue queue) {
return BindingBuilder
.bind(queue)
.to(exchange)
.with("#.del_goods.#")
.noargs();
}
}
修改商品服务实现类,增删改商品后发送消息
xxxxxxxxxx
@DubboService
public class GoodsServiceImpl implements GoodsService {
@Autowired
private GoodsMapper goodsMapper;
@Autowired
private GoodsImageMapper goodsImageMapper;
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
public void add(Goods goods) {
// 插入商品数据
goodsMapper.insert(goods);
// 插入图片数据
Long goodsId = goods.getId(); // 获取商品主键
List<GoodsImage> images = goods.getImages(); // 商品图片
for (GoodsImage image : images) {
image.setGoodsId(goodsId); // 给图片设置商品id
goodsImageMapper.insert(image); // 插入图片
}
// 插入商品_规格项数据
List<Specification> specifications = goods.getSpecifications(); // 获取规格
List<SpecificationOption> options = new ArrayList(); // 规格项集合
// 遍历规格,获取规格中的所有规格项
for (Specification specification : specifications) {
options.addAll(specification.getSpecificationOptions());
}
// 遍历规格项,插入商品_规格项数据
for (SpecificationOption option : options) {
goodsMapper.addGoodsSpecificationOption(goodsId,option.getId());
}
// 将商品数据同步到ES中
rabbitTemplate.convertAndSend("goods_exchange","sync_goods",findById(goodsId));
}
@Override
public void update(Goods goods) {
// 删除旧图片数据
Long goodsId = goods.getId(); // 商品id
QueryWrapper<GoodsImage> queryWrapper = new QueryWrapper();
queryWrapper.eq("goodsId",goodsId);
goodsImageMapper.delete(queryWrapper);
// 删除旧规格项数据
goodsMapper.deleteGoodsSpecificationOption(goodsId);
// 插入商品数据
goodsMapper.updateById(goods);
// 插入图片数据
List<GoodsImage> images = goods.getImages(); // 商品图片
for (GoodsImage image : images) {
image.setGoodsId(goodsId); // 给图片设置商品id
goodsImageMapper.insert(image); // 插入图片
}
// 插入商品_规格项数据
List<Specification> specifications = goods.getSpecifications(); // 获取规格
List<SpecificationOption> options = new ArrayList(); // 规格项集合
// 遍历规格,获取规格中的所有规格项
for (Specification specification : specifications) {
options.addAll(specification.getSpecificationOptions());
}
// 遍历规格项,插入商品_规格项数据
for (SpecificationOption option : options) {
goodsMapper.addGoodsSpecificationOption(goodsId,option.getId());
}
// 将商品数据同步到ES中
rabbitTemplate.convertAndSend("goods_exchange","sync_goods",findById(goodsId));
}
@Override
public GoodsDesc findById(Long id) {
return goodsMapper.findById(id);
}
@Override
public List<GoodsDesc> findAll() {
return goodsMapper.findAll();
}
@Override
public void putAway(Long id, Boolean isMarketable) {
goodsMapper.putAway(id,isMarketable);
if (isMarketable){
// 上架时同步到ES
rabbitTemplate.convertAndSend("goods_exchange","sync_goods",findById(id));
}else{
// 下架删除ES数据
rabbitTemplate.convertAndSend("goods_exchange","del_goods",id);
}
}
}