当前位置: 首页 > news >正文

Rabbitmq 死信取消超时订单

本文使用的版本

  • otp_win64_25.0
  • rabbitmq-server-3.11.26
  • rabbitmq插件 rabbitmq_delayed_message_exchange-3.11.1

pom.xml文件

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.11.0</version>
</dependency>

OrderTimeOutCancelConfig.java

@Configuration
@Data
public class OrderTimeOutCancelConfig {/*** 正常订单队列,此队列不要绑定消费者,否自无法进入死信队列*/@Beanpublic Queue orderQueue() {Map<String, Object> arguments = new HashMap<>();arguments.put("x-message-ttl", 10000);//超时关闭时间10sarguments.put("x-dead-letter-exchange", RabbitConstants.ORDER_DLX_EXCHANGE);arguments.put("x-dead-letter-routing-key", RabbitConstants.ORDER_DLX_ROUTING_KEY);Queue queue = new Queue(RabbitConstants.ORDER_QUEUE, true, false, false, arguments);return queue;}/*** 自定义交换机*/@Beanpublic CustomExchange orderExchange() {Map<String, Object> arguments = new HashMap<>();arguments.put("x-delayed-type", ExchangeTypes.TOPIC);return new CustomExchange(RabbitConstants.ORDER_EXCHANGE, "x-delayed-message", true, false, arguments);}/*** 绑定交换机和队列*/@Beanpublic Binding orderRouting() {return BindingBuilder.bind(orderQueue()).to(orderExchange()).with(RabbitConstants.ORDER_ROUTING_KEY).noargs();}/*** 订单死信队列* @return {@link Queue}*/@Beanpublic Queue orderDlxQueue() {Queue queue = new Queue(RabbitConstants.ORDER_DLX_QUEUE, true, false, false);return queue;}/*** 死信交换机*/@Beanpublic Exchange orderDlxExchange() {return new DirectExchange(RabbitConstants.ORDER_DLX_EXCHANGE, true, false, null);}/*** 绑定*/@Beanpublic Binding orderDlxRouting() {return BindingBuilder.bind(orderDlxQueue()).to(orderDlxExchange()).with(RabbitConstants.ORDER_DLX_ROUTING_KEY).noargs();}
}
@Component
@Slf4j
public class OrderCancelHandler {/***	监听订单死信队列,关闭订单*/@RabbitListener(queues = RabbitConstants.ORDER_DLX_QUEUE, ackMode = "MANUAL")public void onMessage(Message message, Channel channel) throws IOException {log.info("消息进入死信队列...");String thdTransFlow = new String(message.getBody());log.info(thdTransFlow + "订单取消");// 手动ackchannel.basicAck(message.getMessageProperties().getDeliveryTag(), false);}
}

OrderService.java

@Resource

	private AmqpTemplate amqpTemplate;public R purchase(){//其它业务处理//放入队列try {amqpTemplate.convertAndSend(RabbitConstants.ORDER_EXCHANGE, RabbitConstants.ORDER_ROUTING_KEY, thdTransFlow.getBytes());   //使用上面默认时间// 放入死信队列    需要指定其它过期时间时,根据需求二选一即可//Integer delayTime = 10 * 1000;//amqpTemplate.convertAndSend(RabbitConstants.ORDER_EXCHANGE, RabbitConstants.ORDER_ROUTING_KEY, thdTransFlow, message -> {//message.getMessageProperties().setDelay(delayTime);//return message;//}); } catch (AmqpException e) {log.error("放入取消队列出现异常{}",e.getMessage());//throw new RuntimeException(e);}          //其它业务处理}
http://www.lryc.cn/news/263916.html

相关文章:

  • C语言—每日选择题—Day55
  • 软件测试岗位的简历怎么写?项目怎么包装
  • 服务器解析漏洞是什么?攻击检测及修复
  • HTML---CSS美化网页元素
  • 【Docker】基础篇
  • Potplayer播放器远程访问群晖WebDav本地资源【内网穿透】
  • 【神经网络】imshow展示图片报错
  • 【C++】对象特性:无参有参构造函数,拷贝构造函数,析构函数
  • 【算法与数据结构】1005、LeetCode K 次取反后最大化的数组和
  • 作业--day34
  • 车辆违规开启远光灯检测系统:融合YOLO-MS改进YOLOv8
  • 爬虫工作量由小到大的思维转变---<第十三章 Scrapy之pipelines分离的思考>
  • 【Unity】运行时创建曲线(贝塞尔的运用)
  • 基于DSP的IIR数字滤波器(论文+源码)
  • Django(一)
  • 微信小程序如何利用createIntersectionObserver实现图片懒加载
  • 七:爬虫-数据解析之正则表达式
  • 云原生之深入解析亿级流量架构之服务限流思路与方法
  • 【Python炫酷系列】祝考研的友友们金榜题名吖(完整代码)
  • KL散度、CrossEntropy详解
  • 【算法】红黑树
  • 2023楚慧杯 WEB方向 部分:(
  • STM32 CAN多节点组网项目实操 挖坑与填坑记录2
  • Flink 数据类型 TypeInformation信息
  • 基于python的leetcode算法介绍之递归
  • 2023年度佳作:AIGC、AGI、GhatGPT、人工智能大语言模型的崛起与挑战
  • Axure的交互以及情形的介绍
  • 【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用
  • 米游社区表情包整合网站源码
  • easyexcel调用公共导出方法导出数据