作业

2024-11-23 18:37

取消订单

在处理超时未支付订单时,如果发现订单确实超时未支付,最终需要关闭该订单。

关闭订单需要完成两件事情:

  • 将订单状态修改为已关闭

  • 恢复订单中已经扣除的库存

这部分功能尚未实现。

大家要在IOrderService接口中定义cancelOrder方法:

void cancelOrder(Long orderId);

并且在OrderServiceImpl中实现该方法。实现过程中要注意业务幂等性判断。

抽取MQ工具

MQ在企业开发中的常见应用我们就学习完毕了,除了收发消息以外,消息可靠性的处理、生产者确认、消费者确认、延迟消息等等编码还是相对比较复杂的。

因此,我们需要将这些常用的操作封装为工具,方便在项目中使用。要求如下:

  • hm-commom模块下编写发送消息的工具类RabbitMqHelper

  • 定义一个自动配置类MqConsumeErrorAutoConfiguration,内容包括:

    • 声明一个交换机,名为error.direct,类型为direct

    • 声明一个队列,名为:微服务名 + error.queue,也就是说要动态获取

    • 将队列与交换机绑定,绑定时的RoutingKey就是微服务名

    • 声明RepublishMessageRecoverer,消费失败消息投递到上述交换机

    • 给配置类添加条件,当spring.rabbitmq.listener.simple.retry.enabledtrue时触发

RabbitMqHelper的结构如下:

public class RabbitMqHelper {

    private final RabbitTemplate rabbitTemplate;

    public void sendMessage(String exchange, String routingKey, Object msg){

    }

    public void sendDelayMessage(String exchange, String routingKey, Object msg, int delay){

    }

    public void sendMessageWithConfirm(String exchange, String routingKey, Object msg, int maxRetries){
        
    }
}

改造业务

利用你编写的工具,改造支付服务、购物车服务、交易服务中消息发送功能,并且添加消息确认或消费者重试机制,确保消息的可靠性。

相关文章
热点文章
精彩视频
Tags

站点地图 在线访客: 今日访问量: 昨日访问量: 总访问量: