Salmon的全栈知识 Salmon的全栈知识
首页
  • JavaSE
  • JavaWeb
  • Spring生态
  • JUC
  • JVM
  • Netty
  • Java各版本特性
  • 23种设计模式
  • Maven
  • Java常用框架
  • Dubbo
  • OpenFeign
  • Nacos
  • Zookeeper
  • Sentinel
  • Seata
  • SpringCloud Gateway
  • Apollo
  • Eureka
  • Go基础
  • Gin
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
    • ElasticSearch
  • 消息中间件

    • RabbitMQ
    • RocketMQ
    • Kafka
    • ActiveMQ
    • MQTT
    • NATS
  • 网关中间件

    • Nginx
  • Linux
  • Docker
  • Git
  • K8s
  • Solidity
  • Java
  • 计算机网络
  • 操作系统
GitHub (opens new window)
首页
  • JavaSE
  • JavaWeb
  • Spring生态
  • JUC
  • JVM
  • Netty
  • Java各版本特性
  • 23种设计模式
  • Maven
  • Java常用框架
  • Dubbo
  • OpenFeign
  • Nacos
  • Zookeeper
  • Sentinel
  • Seata
  • SpringCloud Gateway
  • Apollo
  • Eureka
  • Go基础
  • Gin
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
    • ElasticSearch
  • 消息中间件

    • RabbitMQ
    • RocketMQ
    • Kafka
    • ActiveMQ
    • MQTT
    • NATS
  • 网关中间件

    • Nginx
  • Linux
  • Docker
  • Git
  • K8s
  • Solidity
  • Java
  • 计算机网络
  • 操作系统
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 基础

    • 初识MQ
    • RabbitMQ
    • SpringAMQP
    • 业务改造
    • 练习
  • 高级

    • 发送者的可靠性
    • MQ的可靠性
    • 消费者的可靠性
    • 延迟消息
    • 实践
      • 1. 取消订单
      • 2. 抽取MQ工具
      • 3. 改造业务
  • 《RabbitMQ》笔记
  • 高级
Salmon
2024-04-26
目录

实践

# 1. 取消订单

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

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

  • 将订单状态修改为已关闭
  • 恢复订单中已经扣除的库存

这部分功能尚未实现。

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

void cancelOrder(Long orderId);

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

# 2. 抽取MQ工具

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

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

  • 在hm-commom模块下编写发送消息的工具类RabbitMqHelper
  • 定义一个自动配置类MqConsumeErrorAutoConfiguration,内容包括:
    • 声明一个交换机,名为error.direct,类型为direct
    • 声明一个队列,名为:微服务名 + error.queue,也就是说要动态获取
    • 将队列与交换机绑定,绑定时的RoutingKey就是微服务名
    • 声明RepublishMessageRecoverer,消费失败消息投递到上述交换机
    • 给配置类添加条件,当spring.rabbitmq.listener.simple.retry.enabled为true时触发

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){
        
    }
}

# 3. 改造业务

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

上次更新: 2025/07/23, 01:37:33
延迟消息

← 延迟消息

Theme by Vdoing | Copyright © 2022-2025 Salmon's Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式