seo网站营销,网站做公司,服装网站建设前景分析,哪个网站有淘宝做图的素材一、使用“死信队列”消息过期时间
1、原理#xff1a;
设置消息”存活时间“#xff0c;如果没有被及时消费#xff0c;就会被丢弃到一个”死信队列“#xff0c;然后消费者监听这个死信队列处理消息
2、步骤#xff1a; 2.1、创建两个队列#xff1a; 2.1.1、普通队…一、使用“死信队列”消息过期时间
1、原理
设置消息”存活时间“如果没有被及时消费就会被丢弃到一个”死信队列“然后消费者监听这个死信队列处理消息
2、步骤 2.1、创建两个队列 2.1.1、普通队列设置过期时间30分钟并指定过期后转到死信队列 2.1.2、死信队列消费者监听这里处理超时订单。 2.2、用户下单发送一条消息到普通队列这条消息30分钟后自动过期进入死信队列。 args.put(x-dead-letter-exchange, dead_exchange); 2.3、消费者从死信队列拿到消息检查支付状态取消未支付订单
3、优缺点 3.1、优点不用装插件纯RabbitMQ自带功能 3.2、缺点如果消息还没过期就被消费了可能会提前触发需要保证普通队列没人消费 二、用Rabbit MQ官方插件延时消息插件
1、原理
安装一个官方插件rabbitmq_delayed_message_exchange发送消息时直接指定“延迟多久”在投放比如设置30分钟后投递到队列。
2、步骤 2.1、安装插件创建一个特殊类型的交换机x-delayed-message类型 2.2、发送消息时带上参数headers.put(x-delay,30*60*1000)。表示延时30分钟。 2.3、消费者正常监听队列30分钟后才会接收消息去处理
3、优缺点 3.1、优点简单直接消息精准延时。 3.2、需要装插件运维成本更高。 问题消息阻塞问题 加消费者最简单的办法多开几个实例一起消费。 调预取值控制每个消费者拿消息的数量别让它“贪多嚼不烂”。 设队列上限队列不能无限扩容超过长度直接拒绝或丢旧消息。 设消息过期没用的消息早点扔掉比如超时未支付的订单。 死信队列兜底过期或失败的消息统一转到一个队列处理。 监控告警发现队列快满了赶紧扩容或限流。 生产者限流根据队列状态动态控制发送速度。