黑马09电商项目的创建订单的解析

线程安全是同时执行,导致数据重复计算,比如减去库存问题;解决方案:如果加锁,锁还是基于jvm,那么分布式还是会存在线程安全问题;分布式锁,基于rollkeeper,

利用UPDATE tb_stock SET stock = stock - #{num} WHERE sku_id = #{id} AND stock >= #{num};数据库的条件库存减去一;mysql查询是行锁,更新是表锁,sync之后将是表锁;

不在java代码中做并发的考虑而是使用mysql;

Feign使用demo:

订单服务代码:

GoodsApi类的 goodsService.decreaseStock(cartDTOS);

@FeignClient("item-service")//创建对象和HTTP调用

public interface GoodsClient extends GoodsApi{

}

生产者的代码

public interface GoodsApi {

    @PostMapping("stock/decrease")

    void decreaseStock(@RequestBody List<CartDTO> cartDTOS);

}

web内

    @PostMapping("stock/decrease")

    public ResponseEntity<Void> decreaseStock(@RequestBody List<CartDTO> cartDTOS){

        goodsService.decreaseStock(cartDTOS);//

        return ResponseEntity.status(HttpStatus.NO_CONTENT).build();

    }

 

并发问题,同时执行,可以靠着数据库去实现;分布式事务问题:跨域服务的事务,异步不会回滚;需要保证事务的一致性,解决分布式的事务三种方案:

1:分步执行,先确定没有异常,主体接收客体们的消息,然后主体发送消息让客体门提交到数据库;

2:提交补偿业务:

主体接收客体men的消息后,有异常则执行客体们的补偿业务;不再回滚业务,还有可能补偿失败而执行的重试问题,

   3:mq的异步确保,消息不丢失之下的消费者的不断重试直到成功;

将对象转为xml格式;

将作为参数的xml转为对象时,可以

<dependency>

<groupId>com.fasterxml.jackson.dataformat</groupId>

<artifactId>jackson-dataformat-xml</artifactId>

<version>2.9.5</version>

</dependency>

@PostMapping(value = "pay",produces = "application/xml")//声明返回结果为xml类型

    public Map<String,String> hello(@RequestBody Map<String,String> result){//在pom文件中引入了xml解析器

未支付、支付成功、支付失败;前端的定时任务不断的在查,微信可能调用多次通知;

部署到docker、即虚拟机,先打包

git pull origin

第三步:打包代码

mvn clean package

tail -f ../logs/talentweb.log

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值