title: Redis实现优先级队列 tags:
- redis
- mq
- list
- 优先级
- deadletter categories: redis date: 2017-09-05 13:06:23
背景
基于目前系统中存在部分异步需求,比如导入或者新开客户车辆匹配Vin码等
实现思路
- redis中使用列表作为队列 最关键提供了阻塞版本的指令BLPOP
- 新建三个队列对应高中低优先级 比如f6car_high f6car_mid f6_car_low 再新建deadletter列表 failLetter列表
- 当有任务发出根据优先级放入不同的队列中 比如
- 此时消费者收到对应请求
- 为避免出现错误 比如处理该请求失败 直接将对应的请求重新投递到对应的failLetter列表中(也可以区分优先级)===》这部分可以手工处理或者二次处理直到不OK(策略可以自己定义)
- 定义序列化对象 包含如下属性
属性名称
属性类型
属性描述
说明
docType String 类型,处理对应的类型,比如VIN 对应doctype的listener处理,如果失败丢入failLetter,如果没有对应type丢入deadLetter mqBean Disturbable 对应对象,比如VinMqBean 封装vin码 业务对象(实现指定接口) disturbateTime long 时间 投递时间 from String 来源系统 - 定义Listener来监听处理