Java实现Redis的Stream数据结构消息队列Demo

·  阅读 628
Java实现Redis的Stream数据结构消息队列Demo

想做一个对消息队列实现场景、但是网上的基本例子都是监听消息、然后在消费、但是他们只是一个Listener监听器监听这所有组、所有消费者的一种情况、他们的具体是实现场景、我个人不是很明白、 以下是我个人想到场景、如有遗漏还请指教!!!

设想1

有个场景我订阅一个人的动态、等他发布动态、可以以很多种方式来通知我、他发布了动态叫我去看、通知方式(邮件通知、短信通知)、发布动态初始流程是他发布动态 》邮件通知 》短信通知 》返回发布动态成功、这种情况很不正常、我发布个动态我要走这么多通知流程、万一某个流程卡住了、我要等几分钟才返回动态发布成功

image.png

搞一个消息队列来优化上面案例

image.png

上图优化了、他发布动态无需等待所有通知完在返回显示动态发布成功、交给一个第三者来处理消息通知、并通知到每一个需要通知的人。

设想2

发布/订阅的场景、有订阅就有通知、通知什么呢?通知我干嘛干嘛了让你来看、就好比张三李四订阅了老王下楼修水龙头、这时张三李四去问老王、都有什么通知方式(属于张三李四的个人持有特权)、这时通知都有什么方式通知到(张三李四)?、(小秘密!!!、张三老王哥们儿)、老王说QQ上通知你们、嘿嘿嘿!!!

后续

由以上场景得知 张三老王哥们儿、而李四特权就少点

  • 张三 QQ通知、短信通知、电话通知。
  • 李四 QQ通知。

image.png

从图中来看、老王写的小脚本就是消费者、由他来操作老王的消息通知张三李四、但是张三李四的特权又不一样、我们只好让小脚本来终止没有对应特权的消息、如老王给队列中发布了一条消息并携带(已知张三李四对应拥有的特权)、内容是下午去李阿姨家修水龙头...这条内容给三个组拿到了(老王提前预定的服务)、接下来就看小脚本(消费者)、接下来就是发消息通知他们俩、老王要行动了!!!

  • QQ通知(两个小脚本):脚本1一下没注意、消息被脚本2拿到消息中的张三李四和对应拥有的特权并通知有特权的人、发送张三李四都有特权、发送QQ消息给他们俩、后面给小脚本给服务发送的一条消息说这个消息已经发送(标记已经发送、手动ack)。

  • 短信通知(两个小脚本):脚本2一下没注意、消息被脚本1拿到消息中的张三李四和对应拥有的特权并通知有特权的人、张三通知完、发现李四没有特权、就不会发短信给李四!!!、后面给小脚本给服务发送的一条消息说这个消息已经发送(标记已经发送、手动ack)。

  • 电话通知(两个小脚本):脚本2一下没注意、消息被脚本1拿到消息中的张三李四和对应拥有的特权并通知有特权的人、张三通知完、发现李四没有特权、就不会打电话给李四!!!、后面给小脚本给服务发送的一条消息说这个消息已经发送(标记已经发送、手动ack)。

小结

以上内容、是由类似发布/订阅、我发布一条内容、订阅我的人得到对应通知、都有什么通知、取决于订阅的人个人特权、就好比如:张三在后台开启了邮件通知、但是没有开启短信通知、在处理消息的时候会根据订阅人的个人特权来对应通知该消息是否要进行通知!!!这是只会有邮件通知到张三!!!

总结

以上需求案例、是在有多种类型的通知、通知顺序不是有序通知、有可能通知2先通知到用户、在通知1在通知到用户、实现场景还是要根据你们的业务来实现、以上案例可以当做一个思路!!!

码云地址:Java实现Redis的Stream数据结构消息队列Demo

image.png

每日一汤

请不要转达对别人的不好的话、你可能不在意、但是别人已经记住了。请不要转达对别人的不好的话、你可能不在意、但是别人已经记住了。
分类:
后端
标签:
分类:
后端
标签: