2019-11-30:Redis消息队列实现方案

1.订阅与发布命令

优点:适合及时通讯。
缺点:无法持久化数据,和消息保持.

2.使用stream类型

必须是5.0版本
优先:支持数据持久化,和消息保持.
原理:实现消息链表,消费组订阅消息链表上的消息,通过id记录当前消费到什么位置,通过pending_ids,保存没有被ack的消息。

jedis客户端使用案例

XADD:添加消息

jedis.xadd("jedisMsg", StreamEntryID.NEW_ENTRY,map);
//参数说明:
第一个参数:消息队列名称
第二个参数:指定ID生成策略
第三个参数:map类型的消息结构

XREAD:读取消息[异步或堵塞]

 jedis.xread(10,1000,entry);
//参数说明:
第一个参数:拉取消息的最大条数.
第二个参数:异步等待时间.如果是0,异步操作
第三个参数:Map.Entry entry =null:key:消息队列名称,value:指定消息ID 0|$.
返回类型:List>>
jedis.xdel("jedisMsg2",list1.get(0).getValue().get(0).getID());
//参数说明:
第一个参数:消息队列名称
第二个参数:要删除的消息ID,可变参数

消费组

xgroupCreate:创建消费组

jedis.xgroupCreate("msgList","basicGroup",new StreamEntryID(),false);
//参数说明:
第一个参数:消息队列名称.
第二个参数:分组名称
第三个参数:消息起始ID.
第四个参数:暂不知.

xpending:获取消费者未确认的消息列表

jedis.xpending("msgList","basicGroup",new StreamEntryID("0-0"), new StreamEntryID("9999999999999-0"),20,"test1");
//参数说明:
第一个参数:消息队列名称.
第二个参数:分组名称
第三个参数:消息起始ID.
第四个参数:消息结束ID.
第五个参数:一次获取的最大消息数量.
第六个参数:消费者名称.

xgroupSetID:指定分组的起始消息位置(ID)

jedis.xgroupSetID("msgList","basicGroup",new StreamEntryID());
//参数说明:
第一个参数:消息队列名称.
第二个参数:分组名称
第三个参数:消息起始ID.

xreadGroup:读取分组中消费者的消息列表

jedis.xreadGroup("basicGroup","test1",1,0,true,new RedisEntry("msgList",null));
//参数说明:
第一个参数:分组名称.
第二个参数:消费者名称.
第三个参数:一次获取的最大消息数量.
第四个参数:堵塞等待时间.
第五个参数:是否自动ack.
第六个参数:消息队列. null 默认:> 跳过创建之前的消息.

你可能感兴趣的:(2019-11-30:Redis消息队列实现方案)