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 默认:> 跳过创建之前的消息.