想做一个对消息队列实现场景、但是网上的基本例子都是监听消息、然后在消费、但是他们只是一个Listener监听器
监听这所有组、所有消费者的一种情况、他们的具体是实现场景、我个人不是很明白、 以下是我个人想到场景、如有遗漏还请指教!!!
设想1
有个场景我订阅一个人的动态、等他发布动态、可以以很多种方式来通知我、他发布了动态叫我去看、通知方式(邮件通知、短信通知)、发布动态初始流程是他发布动态 》邮件通知 》短信通知 》返回发布动态成功
、这种情况很不正常、我发布个动态我要走这么多通知流程、万一某个流程卡住了、我要等几分钟才返回动态发布成功
搞一个消息队列来优化上面案例
上图优化了、他发布动态无需等待所有通知完在返回显示动态发布成功、交给一个第三者来处理消息通知、并通知到每一个需要通知的人。
设想2
发布/订阅的场景、有订阅就有通知、通知什么呢?通知我干嘛干嘛了让你来看、就好比张三
和李四
订阅了老王
下楼修水龙头、这时张三
和李四
去问老王
、都有什么通知方式(属于张三
和李四
的个人持有特权)、这时通知都有什么方式通知到(张三
和李四
)?、(小秘密!!!、张三
是老王
好哥们儿
)、老王
说QQ上通知你们、嘿嘿嘿!!!
后续
由以上场景得知 张三
是老王
好哥们儿
、而李四
特权就少点
张三
QQ通知、短信通知、电话通知。李四
QQ通知。
从图中来看、老王
写的小脚本就是消费者、由他来操作老王
的消息通知张三
和李四
、但是张三
和李四
的特权又不一样、我们只好让小脚本来终止没有对应特权的消息、如老王
给队列中发布了一条消息并携带(已知张三
和李四
对应拥有的特权)、内容是下午去李阿姨家修水龙头...
这条内容给三个组拿到了(老王
提前预定的服务)、接下来就看小脚本(消费者)、接下来就是发消息通知他们俩、老王要行动了!!!
-
QQ通知(两个小脚本):脚本1一下没注意、消息被脚本2拿到消息中的
张三
和李四
和对应拥有的特权并通知有特权的人、发送张三
和李四
都有特权、发送QQ消息给他们俩、后面给小脚本给服务发送的一条消息说这个消息已经发送(标记已经发送、手动ack)。 -
短信通知(两个小脚本):脚本2一下没注意、消息被脚本1拿到消息中的
张三
和李四
和对应拥有的特权并通知有特权的人、张三
通知完、发现李四
没有特权、就不会发短信给李四
!!!、后面给小脚本给服务发送的一条消息说这个消息已经发送(标记已经发送、手动ack)。 -
电话通知(两个小脚本):脚本2一下没注意、消息被脚本1拿到消息中的
张三
和李四
和对应拥有的特权并通知有特权的人、张三
通知完、发现李四
没有特权、就不会打电话给李四
!!!、后面给小脚本给服务发送的一条消息说这个消息已经发送(标记已经发送、手动ack)。
小结
以上内容、是由类似发布/订阅
、我发布一条内容、订阅我的人得到对应通知、都有什么通知、取决于订阅的人个人特权、就好比如:张三在后台开启了邮件通知、但是没有开启短信通知、在处理消息的时候会根据订阅人的个人特权来对应通知该消息是否要进行通知!!!这是只会有邮件通知到张三!!!
总结
以上需求案例、是在有多种类型的通知、通知顺序不是有序通知、有可能通知2先通知到用户、在通知1在通知到用户、实现场景还是要根据你们的业务来实现、以上案例可以当做一个思路!!!
码云地址:Java实现Redis的Stream数据结构消息队列Demo
每日一汤
请不要转达对别人的不好的话、你可能不在意、但是别人已经记住了。请不要转达对别人的不好的话、你可能不在意、但是别人已经记住了。