前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >订单服务以及优惠券服务及rabbitmq(7)-1024电商平台项目技术选择和创 建聚合工程项目【工业级PaaS云平台+SpringCloudAlibaba+JDK11综合项目实战】

订单服务以及优惠券服务及rabbitmq(7)-1024电商平台项目技术选择和创 建聚合工程项目【工业级PaaS云平台+SpringCloudAlibaba+JDK11综合项目实战】

作者头像
高大北
发布2022-09-16 16:39:55
1.5K0
发布2022-09-16 16:39:55
举报

第二十七章 新版消息队列RabbitMQ回顾和容器化安装部署

第1集 基于Linux服务器安装RabbitMQ容器化部署

简介:Docker安装RabbitMQ消息队列

#拉取镜像
docker pull rabbitmq:3.8.12-management-alpine

docker run -d --hostname rabbit_host1 --name xd_rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 rabbitmq:3.8.12-management-alpine

#介绍
-d 以守护进程方式在后台运行
-p 15672:15672 management 界面管理访问端口
-p 5672:5672 amqp 访问端口
--name:指定容器名
--hostname:设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts,作为容器主机IP的别名,并且将显示在容器的bash中

-e 参数
  RABBITMQ_DEFAULT_USER 用户名
  RABBITMQ_DEFAULT_PASS 密码
  • 主要端口介绍
4369 erlang 发现口

5672 client 端通信口

15672 管理界面 ui 端口

25672 server 间内部通信口

访问管理界面

  • ip:15672

注意事项!!!!

  • Linux服务器检查防火墙是否关闭
  • 云服务器检查网络安全组是否开放端口
CentOS 7 以上默认使用的是firewall作为防火墙
查看防火墙状态
firewall-cmd --state

停止firewall
systemctl stop firewalld.service

禁止firewall开机启动
systemctl disable firewalld.service
第2集 延迟队列核心知识之RabbitMQ死信队列 + TTL回顾

简介:讲解RabbitMQ的的死信队列+ TTL

  • 什么是TTL
    • time to live 消息存活时间
    • 如果消息在存活时间内未被消费,则会别清除
    • RabbitMQ支持两种ttl设置
      • 单独消息进行配置ttl
      • 整个队列进行配置ttl(居多)
  • 什么是rabbitmq的死信队列
    • 没有被及时消费的消息存放的队列
  • 什么是rabbitmq的死信交换机
    • Dead Letter Exchange(死信交换机,缩写:DLX)当消息成为死信后,会被重新发送到另一个交换机,这个交换机就是DLX死信交换机。
image-1659079002855
image-1659079002855
image-1659079010095
image-1659079010095
  • 消息有哪几种情况成为死信
    • 消费者拒收消息**(basic.reject/ basic.nack)**,并且没有重新入队 requeue=false
    • 消息在队列中未被消费,且超过队列或者消息本身的过期时间TTL(time-to-live)
    • 队列的消息长度达到极限
    • 结果:消息成为死信后,如果该队列绑定了死信交换机,则消息会被死信交换机重新路由到死信队列
第3集 RabbitMQ 延迟队列介绍和应用场景回顾

简介:讲解RabbitMQ的延迟队列和应用场景

  • 什么是延迟队列
    • 一种带有延迟功能的消息队列,Producer 将消息发送到消息队列 服务端,但并不期望这条消息立马投递,而是推迟到在当前时间点之后的某一个时间投递到 Consumer 进行消费,该消息即定时消息
  • 使用场景
    • 通过消息触发一些定时任务,比如在某一固定时间点向用户发送提醒消息
    • 用户登录之后5分钟给用户做分类推送、用户多少天未登录给用户做召回推送;
    • 消息生产和消费有时间窗口要求:比如在天猫电商交易中超时未支付关闭订单的场景,在订单创建时会发送一条 延时消息。这条消息将会在 30 分钟以后投递给消费者,消费者收到此消息后需要判断对应的订单是否已完成支付。 如支付未完成,则关闭订单。如已完成支付则忽略
  • Cloud微服务大课训练营里面的应用
    • 优惠券回收
    • 商品库存回收
  • 业界的一些实现方式
    • 定时任务高精度轮训
    • 采用RocketMQ自带延迟消息功能
    • RabbitMQ本身是不支持延迟队列的,怎么办?
      • 结合死信队列的特性,就可以做到延迟消息
      • 操作
        • 消息生产
          • 投递到普通的topic交换机
          • 消息过期,进入死信交换机
        • 消息消费
          • 消费者监听死信交换机的队列
          image-1659079032665
          image-1659079032665
第4集 SpringCloudAlibaba微服务整合RabbitMQ依赖和配置

简介:项目整合RabbitMQ依赖和配置

  • 什么是Spring-AMQP
    • 官网:https://spring.io/projects/spring-amqp
    • Spring 框架的AMQP消息解决方案,提供模板化的发送和接收消息的抽象层,提供基于消息驱动的 POJO的消息监听等
    • 提供不依赖于任何特定的AMQP代理实现或客户端库通用的抽象,最终用户代码将很容易实现更易替换、添加和删除AMQP,因为它可以只针对抽象层来开发
    • 总之就是提高我们的框架整合消息队列的效率,SpringBoot为更方便开发RabbitMQ推出了starter,
    • 我们使用 spring-boot-starter-amqp 进行开发
  • common项目添加依赖
       <!--引入AMQP-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-amqp</artifactId>
       </dependency>
  • 各个微服务添加配置
  #消息队列
  rabbitmq:
    host: 8.129.113.233
    port: 5672
    virtual-host: /
    password: password
    username: admin
    #开启手动确认消息
    listener:
      simple:
        acknowledge-mode: manual
  • 其他自定义配置后续添加

第二十八章 下单-优惠券记录锁定和释放功能设计开发

第1集 商品下单锁定优惠券记录模块开发

简介:商品下单锁定优惠券记录模块开发

  • 协议设计
    /**
     * 记录id
     */
    private List<Long> lockCouponRecordIds;

    /**
     * 订单号
     */
    private String orderOutTradeNo;
  • controlle层接口开发
  • service层开发
第2集 优惠券微服务RabbitMQ延迟消息交换机和队列配置

简介:优惠券微服务RabbitMQ延迟消息交换机和队列配置

image-1659079071376
image-1659079071376
  • 配置文件
#自定义消息队列配置,发送锁定库存消息-》延迟exchange-》lock.queue-》死信exchange-》release.queue
mqconfig:
  #延迟队列,不能被监听消费
  coupon_release_delay_queue: coupon.release.delay.queue

  #延迟队列的消息过期后转发的队列
  coupon_release_queue: coupon.release.queue

  #交换机
  coupon_event_exchange: coupon.event.exchange

  #进入延迟队列的路由key
  coupon_release_delay_routing_key: coupon.release.delay.routing.key

  #消息过期,进入释放死信队列的key
  coupon_release_routing_key: coupon.release.routing.key

  #消息过期时间,毫秒,测试改为15秒
  ttl: 15000
  • 配置类
    /**
     * 交换机
     */
    @Value("${mqconfig.coupon_event_exchange}")
    private String eventExchange;


    /**
     * 第一个队列延迟队列,
     */
    @Value("${mqconfig.coupon_release_delay_queue}")
    private String couponReleaseDelayQueue;

    /**
     * 第一个队列的路由key
     * 进入队列的路由key
     */
    @Value("${mqconfig.coupon_release_delay_routing_key}")
    private String couponReleaseDelayRoutingKey;


    /**
     * 第二个队列,被监听恢复库存的队列
     */
    @Value("${mqconfig.coupon_release_queue}")
    private String couponReleaseQueue;

    /**
     * 第二个队列的路由key
     *
     * 即进入死信队列的路由key
     */
    @Value("${mqconfig.coupon_release_routing_key}")
    private String couponReleaseRoutingKey;

    /**
     * 过期时间
     */
    @Value("${mqconfig.ttl}")
    private Integer ttl;
第3集 延迟消息功能测试开发和注意事项

简介:延迟消息测试和注意事项

  • 测试代码编写测试
@RunWith(SpringRunner.class)
@SpringBootTest(classes = CouponApplication.class)
@Slf4j
public class DemoApplicationTests {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void send(){
      rabbitTemplate.convertAndSend("coupon.event.exchange","coupon.release.delay.routing.key","5qeqweqw");
      
  }

}
  • 注意
    • 有些版本会自动创建队列和交换机@bean,有些是要初次请求才会(如果有同学知道原因可以分享下)
    • 如果MQ已经存在对应的队列,则不会重新创建
    • 修改配置后,需要删除队列重新建立生效
    • 如果队列和交换机已经存在,重新启动项目会有错误警告,可以忽略
第4集 优惠券锁定-发送延迟消息功能开发

简介:优惠券微服务发送延迟消息开发

  • 消息协议介绍
@Data
public class CouponRecordMessage {

    /**
     * 消息队列id
     */
    private Long messageId;

    /**
     * 订单号
     */
    private String outTradeNo;

    /**
     * 库存锁定工作单id
     */
    private Long taskId;

}
  • 发送功能开发
for(CouponTaskDO couponTaskDO : couponTaskDOList){
  CouponRecordMessage couponRecordMessage = new CouponRecordMessage();
  couponRecordMessage.setOutTradeNo(orderOutTradeNo);
  couponRecordMessage.setTaskId(couponTaskDO.getId());

                  rabbitTemplate.convertAndSend(rabbitMQConfig.getEventExchange(),rabbitMQConfig.getCouponReleaseDelayRoutingKey(),couponRecordMessage);
  log.info("优惠券锁定消息发送成功:{}",couponRecordMessage.toString());
}
第5集 优惠券微服务延迟消息消费-释放优惠券功能开发《上》

简介:优惠券回收-延迟消息消费回收功能开发《上》

  • 优惠券消费MQ监听器开发
  • 流程梳理
优惠券解锁记录场景
  1、超时未支付,比如30分钟则订单失效关闭
  2、下单成功,创建订单业务失败,订单回滚
 
 
库存解锁防止继续支付:
1、30分支付超时则无法支付订单
 
2、订单31分延迟消息(比订单超时大几分钟)
            ->查询订单状态-向第三方支付查询订单状态,只有未支付状态,且本地订单状态是NEW,才修改本地订单状态为取消CANCEL,其他业务才可以解锁对应的库存库存
 
3、商品、优惠券库存32分延迟消息(比订单超时大几分钟)
  ->查询订单状态-订单不存在,解锁库存
  ->查询订单状态
    1)订单状态为取消CANCEL的情况,才可以解锁库存,确认消息接收;
    2)订单状态为未支付NEW的情况,则不解锁库存,不修改订单状态,重新投递消息或者拒收;
      (避免网络延迟到 导致订单关单消息,比库存解锁还慢,没更新订单状态)
    3)如果是订单已经支付则修改库存task工作单状态,确认消息接收;
 
注意:延迟队列一定要开启手动的ack机制,防止解锁失败,消息丢失,也要防止多次解锁
    解锁库存的时候:修改状态和修改对应库存task工作单状态应该是同个事务,防止其中一个失败
第6集 订单微服务-查询订单支付状态接口开发

简介:订单微服务-查询订单支付状态接口开发

  • 查询订单支付状态接口开发(MQ里面没token,不需要登录)
第7集 数据一致性多场景用例测试-延迟消息消费释放优惠券功能开发《下》

简介:优惠券回收-延迟消息消费回收功能开发《下》

  • 流程测试
    • 写单元测试,发送消息
      • 订单支付完成用例测试
      • 订单超时未支付用例测试
      • 订单异常不存在用例测试
    • 消息延迟,监听消息处理
    • 记录更新情况
    • bug修复:useState变量名称
  • 数据准备
INSERT INTO `product_order` (`id`, `out_trade_no`, `state`, `create_time`, `total_amount`, `pay_amount`, `pay_type`, `nickname`, `head_img`, `user_id`, `del`, `update_time`, `order_type`, `receiver_address`)
VALUES
  (1, '123456abc', 'PAY', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL);



INSERT INTO `coupon_task` (`id`, `coupon_record_id`, `create_time`, `out_trade_no`, `lock_state`)
VALUES
  (1, 1, '2021-02-27 16:05:11', '123456abc', 'LOCK');
  • 功能流程完善
    • 业务逻辑优化
    • 如何保证消息不会重复消费-幂等处理
    • 多个消息并发情况下是否需要加锁
    • 是否还有其他问题,大家可以思考下,然后给出解决方案

愿景:“让编程不再难学,让技术与生活更加有趣”

第二十九章 高并发下商品库存扣减和释放解决方案设计和编码

第1集 商品下单-商品库存锁定模块设计和开发

简介:商品下单-锁定商品库存模块开发

  • 协议设计
@Data
public class LockProductRequest {

    @JsonProperty("order_out_trade_no")
    private String orderOutTradeNo;

    @JsonProperty("order_item_list")
    private List<OrderItemRequest> orderItemList;

}

@Data
public class OrderItemRequest{

    @JsonProperty("product_id")
    private long productId;

    @JsonProperty("buy_num")
    private int buyNum;

}
  • controlle层接口开发
  • service层开发
  • 登录拦截器配置
第2集 商品微服务RabbitMQ延迟消息交换机和队列配置

简介:商品微服务RabbitMQ延迟消息交换机和队列配置

image-1659079136364
image-1659079136364
  • 配置文件
#自定义消息队列配置,发送锁定库存消息-》延迟exchange-》lock.queue-》死信exchange-》release.queue
mqconfig:
  #延迟队列,不能被监听消费
  stock_release_delay_queue: stock.release.delay.queue

  #延迟队列的消息过期后转发的队列
  stock_release_queue: stock.release.queue

  #交换机
  stock_event_exchange: stock.event.exchange

  #进入延迟队列的路由key
  stock_release_delay_routing_key: stock.release.delay.routing.key

  #消息过期,进入释放队列的key
  stock_release_routing_key: stock.release.routing.key

  #消息过期时间,毫秒,测试改为15秒
  ttl: 15000
  • 配置类
    /**
     * 交换机
     */
    @Value("${mqconfig.stock_event_exchange}")
    private String eventExchange;


    /**
     * 第一个队列延迟队列,
     */
    @Value("${mqconfig.stock_release_delay_queue}")
    private String stockReleaseDelayQueue;

    /**
     * 第一个队列的路由key
     * 进入队列的路由key
     */
    @Value("${mqconfig.stock_release_delay_routing_key}")
    private String stockReleaseDelayRoutingKey;


    /**
     * 第二个队列,被监听恢复库存的队列
     */
    @Value("${mqconfig.stock_release_queue}")
    private String stockReleaseQueue;

    /**
     * 第二个队列的路由key
     *
     * 即进入死信队列的路由key
     */
    @Value("${mqconfig.stock_release_routing_key}")
    private String stockReleaseRoutingKey;

    /**
     * 过期时间
     */
    @Value("${mqconfig.ttl}")
    private Integer ttl;
第3集 商品锁定-延迟消息功能测试开发和注意事项

简介:延迟消息测试和注意事项

  • 测试代码编写测试
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ProductApplication.class)
@Slf4j
public class DemoApplicationTests {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void send(){
      rabbitTemplate.convertAndSend("stock.event.exchange","stock.release.delay.routing.key","23342342");
      
  }

}
  • 注意
    • 只有微服务监听mq,才会创建对应的队列和交换机,所以编写测试方法或者写监听器就行
    • IOC容器存在不行,RabbitMQ默认是懒加载模式
    • 如果MQ已经存在对应的队列,则不会重新创建
    • 修改配置后,需要删除队列重新建立生效
    • 如果队列和交换机已经存在,重新启动项目会有错误警告,可以忽略
第4集 商品库存锁定-发送延迟消息功能开发

简介:商品微服务发送延迟消息开发

  • 消息协议介绍
@Data
public class ProductMessage {

    /**
     * 消息队列id
     */
    private Long messageId;


    /**
     * 订单号
     */
    private String outTradeNo;

    /**
     * 库存锁定工作单id
     */
    private Long taskId;

}
  • 发送功能开发
//发送MQ延迟消息 ,解锁商品库存 taskId  TODO
ProductMessage productMessage = new ProductMessage();
productMessage.setTaskId(productTaskDO.getId());
productMessage.setOutTradeNo(orderOutTradeNo);
                rabbitTemplate.convertAndSend(rabbitConfig.getEventExchange(),rabbitConfig.getStockReleaseDelayRoutingKey(),productMessage);
log.info("商品库存锁定信息发送成功:{}",productMessage);
第5集 商品微服务延迟消息消费-释放商品库存功能开发《上》

简介:商品库存释放回收功能开发《上》

  • 商品微服务消费MQ监听器开发
  • 流程梳理
商品库存解锁记录场景
  1、超时未支付,比如30分钟则订单失效关闭
  2、下单成功,创建订单业务失败,订单回滚
 
 
库存解锁防止继续支付:
1、30分支付超时则无法支付订单
 
2、订单31分延迟消息(比订单超时大几分钟)
            ->查询订单状态-向第三方支付查询订单状态,只有未支付状态,且本地订单状态是NEW,才修改本地订单状态为取消CANCEL,其他业务才可以解锁对应的库存库存
 
3、商品、优惠券库存32分延迟消息(比订单超时大几分钟)
  ->查询订单状态-订单不存在,解锁库存
  ->查询订单状态
    1)订单状态为取消CANCEL的情况,才可以解锁库存,确认消息接收;
    2)订单状态为未支付NEW的情况,则不解锁库存,不修改订单状态,重新投递消息或者拒收;
      (避免网络延迟到 导致订单关单消息,比库存解锁还慢,没更新订单状态)
    3)如果是订单已经支付则修改库存task工作单状态,确认消息接收;
 
注意:延迟队列一定要开启手动的ack机制,防止解锁失败,消息丢失,也要防止多次解锁
    解锁库存的时候:修改状态和修改对应库存task工作单状态应该是同个事务,防止其中一个失败
第6集 数据一致性多场景用例测试-延迟消息消费释放商品库存开发《下》

简介: 商品库存回收-延迟消息消费回收功能开发《下》

  • 流程测试
    • 写单元测试,发送消息
      • 订单支付完成用例测试
      • 订单超时未支付用例测试
      • 订单异常不存在用例测试
    • 消息延迟,监听消息处理
    • 记录更新情况
    • 数据准备
INSERT INTO `product_order` (`id`, `out_trade_no`, `state`, `create_time`, `total_amount`, `pay_amount`, `pay_type`, `nickname`, `head_img`, `user_id`, `del`, `update_time`, `order_type`, `receiver_address`)
VALUES
  (1, '123456abc', 'PAY', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL);



INSERT INTO `product_task` (`id`, `product_id`, `buy_num`, `product_name`, `lock_state`, `out_trade_no`, `create_time`)
VALUES
  (1, 1, 2, '杯子-小滴课堂', 'LOCK', '123456abc', '2021-02-28 16:01:52');
  • 功能流程完善
    • 业务逻辑优化
    • 如何保证消息不会重复消费-幂等处理
    • 多个消息并发情况下是否需要加锁
    • 是否还有其他问题,大家可以思考下,然后给出解决方案

第三十章 1024电商平台-订单微服务下单和验价设计和开发

第1集 订单微服务下单逻辑之确认收货地址模开发

简介: 订单微服务-确认收货地址模块开发

  • 订单号生产
  • 获取收货地址详情
    • 方案一:前端一并传递收货地址详情过来
      • 少了一次网络交互
      • 前后端通信包更大
    • 方案二:后端根据收货地址id调用服务查询地址详情
      • 多了一次网络交换
      • 前后端通信包更小
  • 功能测试
    • token传递失败
第2集 Feign底层源码-token令牌丢失原因分析和解决方案

简介: token令牌丢失原因分析和解决方案

  • token传递失败原因分析
  • 解决方案-加入到common公共类上
@Bean("requestInterceptor")
    public RequestInterceptor requestInterceptor(){
        return template -> {
            ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
            if(attributes!=null){
                HttpServletRequest request = attributes.getRequest();
                if (null == request){
                    return;
                }
                log.info(request.getHeaderNames().toString());
                template.header("token", request.getHeader("token"));
            }else {
                log.warn("requestInterceptor获取Header空指针异常");
            }
        };
    }
第3集 订单微服务-下单获取商品最新价格开发

简介:订单微服务下单获取最新价格开发

  • 获取最新商品价格开发
 /**
     * 用于订单服务,确认订单,获取全部购物项
     *
     * 会清空购物车对应的商品
     *
     * @return
     */
    @ApiOperation("下单清空购物项")
    @RequestMapping("confirm_order_cart_items")
    public  JsonData confirmOrderCartItem(@ApiParam("商品id列表") @RequestBody List<Long> productIdList ){
        List<CartItemVO> cartItemVOList = cartService.confirmOrderCartItem(productIdList);
        return JsonData.buildSuccess(cartItemVOList);
    }
  • 下单协议
{
  "coupon_record_id":-1,
  "product_ids":[1,2],
  "pay_type":"ALIPAY",
  "client_type":"H5",
  "address_id":45,
  "total_amount":10,
  "real_pay_amount":10,
  "token":"SbD5D4FLpUzemiuwSEytwGM9LLFGISDQ"
}
第4集 多种解决方案设计-购物车清空下单商品的设计思路你知道多少

简介:下单-购物车清空已经下单商品逻辑作业设计

  • 需求作业
    • 用户创建订单,购物车的商品什么时候进行清除
    • 假如下单流程异常后,怎么回滚
  • 清空购物车逻辑设计方案一
    • 想加分布式事务Seata????
  • 【推荐】清空购物车逻辑设计方案二
    • 直接调用清空-MQ延迟消息(假如订单创建失败则购物车会丢失数据)
      • 解决方案:类似库存解锁和优惠券释放一样的思路(购物车这边做)
        • 延迟消息可以1分钟或者5分钟
        • 直接查询订单是否存在即可(协议增加一个outTradeNo)
  • 这是一个作业,大家要自己尝试哈
第5集 订单微服务-商品验价和优惠券的抵扣功能开发《上》

简介:商品验证价格和优惠券抵扣功能开发

  • 统计商品价格
  • 远程调用获取优惠券
  • 当前购物车是否满足优惠券使用条件
  • 验证价格
第6集 订单微服务-下单锁定优惠券和商品库存逻辑开发《下》

简介:下单锁定优惠券和商品库存逻辑开发

  • 锁定优惠券
  • 锁定商品库存
第7集 订单微服务-创建商品订单和订单项模块开发

简介:下单创建商品订单和订单项模块开发

  • 下单创建商品订单
  • 下单创建商品订单项
  • bug
    • 数据库 product_order 表的 user_id 改为bigint类型,java类型是long

第三十一章 订单超时未支付-定时关单功能设计和开发

第1集 订单超时未支付-定时关单功能流程设计

简介:订单超时未支付-定时关单功能设计

  • 业务流程梳理
    • 消息消费-关单流程设计
    image-1659079241888
    image-1659079241888
第2集 定时关单RabbitMQ延迟消息交换机和队列配置

简介:定时关单RabbitMQ延迟消息交换机和队列配置

image-1659079250408
image-1659079250408
  • 配置文件
#自定义消息队列配置,发送锁定库存消息-》延迟exchange-》lock.queue-》死信exchange-》release.queue
mqconfig:
  #延迟队列,不能被监听消费
  order_close_delay_queue: order.close.delay.queue

  #延迟队列的消息过期后转发的队列
  order_close_queue: order.close.queue

  #交换机
  order_event_exchange: order.event.exchange

  #进入延迟队列的路由key
  order_close_delay_routing_key: order.close.delay.routing.key

  #消息过期,进入释放队列的key,进入死信队列的key
  order_close_routing_key: order.close.routing.key

  #消息过期时间,毫秒,测试改为15秒
  ttl: 15000
  • 配置类
    /**
     * 交换机
     */
    @Value("${mqconfig.order_event_exchange}")
    private String eventExchange;


    /**
     * 延迟队列
     */
    @Value("${mqconfig.order_close_delay_queue}")
    private String orderCloseDelayQueue;

    /**
     * 关单队列
     */
    @Value("${mqconfig.order_close_queue}")
    private String orderCloseQueue;



    /**
     * 进入延迟队列的路由key
     */
    @Value("${mqconfig.order_close_delay_routing_key}")
    private String orderCloseDelayRoutingKey;


    /**
     * 进入死信队列的路由key
     */
    @Value("${mqconfig.order_close_routing_key}")
    private String orderCloseRoutingKey;

    /**
     * 过期时间
     */
    @Value("${mqconfig.ttl}")
    private Integer ttl;
第3集 订单微服务下单-延迟消息功能测试开发和注意事项

简介:延迟消息测试和注意事项

  • 测试代码编写测试
@RunWith(SpringRunner.class)
@SpringBootTest(classes = OrderApplication.class)
@Slf4j
public class DemoApplicationTests {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void send(){
      rabbitTemplate.convertAndSend("order.event.exchange","order.close.delay.routing.key","23342342");
      
  }

}
  • 注意
    • IOC容器存在不行,RabbitMQ默认是懒加载模式
    • 只有微服务监听mq,才会创建对应的队列和交换机,所以编写测试方法或者写监听器就行
    • 如果MQ已经存在对应的队列,则不会重新创建
    • 修改配置后,需要删除队列重新建立生效
    • 如果队列和交换机已经存在,重新启动项目会有错误警告,可以忽略
第4集 订单超时未支付定时关单-发送消息功能开发

简介:用户下单发送定时关单消息开发

  • 消息协议介绍
@Data
public class OrderMessage {

    /**
     * 消息队列id
     */
    private Long messageId;


    /**
     * 订单号
     */
    private String outTradeNo;

}
  • 发送功能开发
 //MQ发送延迟队列 TODO,用于自动关单
OrderMessage orderMessage = new OrderMessage();
orderMessage.setOutTradeNo(orderOutTradeNo);
rabbitTemplate.convertAndSend(rabbitConfig.getEventExchange(), rabbitConfig.getOrderCloseDelayRoutingKey(), orderMessage);
第5集 订单微服务-订单超时未支付自动关单-消息监听处理

简介:订单微服务-订单超时未支付关单消息监听处理

  • 订单微服务消费MQ监听器开发
  • 流程梳理
image-1659079285100
image-1659079285100
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第二十七章 新版消息队列RabbitMQ回顾和容器化安装部署
    • 第1集 基于Linux服务器安装RabbitMQ容器化部署
      • 第2集 延迟队列核心知识之RabbitMQ死信队列 + TTL回顾
        • 第3集 RabbitMQ 延迟队列介绍和应用场景回顾
          • 第4集 SpringCloudAlibaba微服务整合RabbitMQ依赖和配置
          • 第二十八章 下单-优惠券记录锁定和释放功能设计开发
            • 第1集 商品下单锁定优惠券记录模块开发
              • 第2集 优惠券微服务RabbitMQ延迟消息交换机和队列配置
                • 第3集 延迟消息功能测试开发和注意事项
                  • 第4集 优惠券锁定-发送延迟消息功能开发
                    • 第5集 优惠券微服务延迟消息消费-释放优惠券功能开发《上》
                      • 第6集 订单微服务-查询订单支付状态接口开发
                        • 第7集 数据一致性多场景用例测试-延迟消息消费释放优惠券功能开发《下》
                        • 第二十九章 高并发下商品库存扣减和释放解决方案设计和编码
                          • 第1集 商品下单-商品库存锁定模块设计和开发
                            • 第2集 商品微服务RabbitMQ延迟消息交换机和队列配置
                              • 第3集 商品锁定-延迟消息功能测试开发和注意事项
                                • 第4集 商品库存锁定-发送延迟消息功能开发
                                  • 第5集 商品微服务延迟消息消费-释放商品库存功能开发《上》
                                    • 第6集 数据一致性多场景用例测试-延迟消息消费释放商品库存开发《下》
                                    • 第三十章 1024电商平台-订单微服务下单和验价设计和开发
                                      • 第1集 订单微服务下单逻辑之确认收货地址模开发
                                        • 第2集 Feign底层源码-token令牌丢失原因分析和解决方案
                                          • 第3集 订单微服务-下单获取商品最新价格开发
                                            • 第4集 多种解决方案设计-购物车清空下单商品的设计思路你知道多少
                                              • 第5集 订单微服务-商品验价和优惠券的抵扣功能开发《上》
                                                • 第6集 订单微服务-下单锁定优惠券和商品库存逻辑开发《下》
                                                  • 第7集 订单微服务-创建商品订单和订单项模块开发
                                                  • 第三十一章 订单超时未支付-定时关单功能设计和开发
                                                    • 第1集 订单超时未支付-定时关单功能流程设计
                                                      • 第2集 定时关单RabbitMQ延迟消息交换机和队列配置
                                                        • 第3集 订单微服务下单-延迟消息功能测试开发和注意事项
                                                          • 第4集 订单超时未支付定时关单-发送消息功能开发
                                                            • 第5集 订单微服务-订单超时未支付自动关单-消息监听处理
                                                            相关产品与服务
                                                            消息队列 CMQ 版
                                                            消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
                                                            领券
                                                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档