16原理6小道消息pubsub天下无鱼_第1页
16原理6小道消息pubsub天下无鱼_第2页
16原理6小道消息pubsub天下无鱼_第3页
16原理6小道消息pubsub天下无鱼_第4页
16原理6小道消息pubsub天下无鱼_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

前⾯我们讲了Redis消息队列的使⽤⽅法,但是没有提到Redis消为了⽀持消息多播,Redis不能再依赖于那5种基本数据类型了。PubSub,也就是 使⽤Python语⾔来演示⼀下PubSub如何使⽤。#-*-coding:utf-8-*-importtimeimportclient=redis.StrictRedis()p=client.pubsub()printp.get_message()client.publish("codehole","javacomes")printp.get_message()client.publish("codehole","pythoncomes")printp.get_message()printNone,'subscribe','data':None,'message','data':None,'message','codehole','data':'python客户端发起订阅命令后,Redis会⽴即给予⼀个反馈消息通知订阅成get\_message才能拿到反馈消息。客户端接下来执⾏publish命令get\_message才能拿到发布的消息。如果当前没有消息,get\_message会返回空,告知当前没有RedisPubSub⼦实际上使⽤了两个Redis的连接。这是必须的,因为Redis不允许连接在subscribe等待消息时还要进⾏其它的操作。##-*-coding:utf-8-*-importtimeimportclient=redis.StrictRedis()p=client.pubsub()whileTrue:msg=p.get_message()ifnotmsg:print##-*-coding:utf-8-*-importredisclient=redis.StrictRedis()client.publish("codehole","pythoncomes")client.publish("codehole","javacomes")client.publish("codehole","golangpubsub{{'pattern':None,'type':'subscribe','channel':'codehole','data':1L}{'pattern':None,'type':'message','channel':'codehole','data':'pythoncomes'}{'pattern':None,'type':'message','channel':'codehole','data':'javacomes'}{'pattern':None,'type':'message','codehole','data':'golang上⾯的消费者是通过轮询get_message来收取消息的,如果收取不到就休眠1s。这让我们想起了第3节的消息队列模型,我们使⽤blpop来代替休眠来提⾼消息处理的及时性。PubSub的消费者如果使⽤休眠的⽅式来轮询消息,也会遭遇消息处理不及时的问题。不过我们可以使⽤listen来阻塞监听消息来进⾏处理,这点同blpop原理是⼀样的。下⾯我们改造⼀下消费者##-*-coding:utf-8-*-importtimeimportclient=redis.StrictRedis()p=client.pubsub()formsginprint明确指定主题的名称。如果我们想要订阅多个主题,那就subscribesubscribecodehole.imagecodehole.textcodehole.blogsubscribecodehole.imagecodehole.textcodehole.blog同时订阅三个主题,会有三条订阅成功反馈(integer)(integer)(integer)publishcodehole.imagepublishcodehole.image(integer)1publishcodehole.text你好,欢迎加⼊码洞(integer)publishcodehole.blog'{"content":"hello,everyone","title":"welcome"}'(integer)为了简化订阅的繁琐,redis提供了模式订阅功能Patternpsubscribepsubscribecodehole.*#⽤模式匹配⼀次订阅多个主题,主题以codehole.字符开头的消息都可以收到(integer){{'pattern':None,'type':'subscribe','channel':'codehole','data':1L}{'pattern':None,'type':'message','channel':'codehole','data':'pythoncomes'}{'pattern':None,'type':'message','channel':'codehole','data':'javacomes'}{'pattern':None,'type':'message','codehole','data':'golangsubscribe,如果是模式订阅的反馈,它的类型就是psubscribe,还有取消订阅指令的反馈unsubscribe和punsubscribe。PubSubPubSub的⽣产者传递过来⼀个消息,Redis会直接找到相应的消费如果Redis停机重启,PubSubRedis正是因为PubSub有这些缺点,它⼏乎找不到合适的应⽤场景。所以Redis的作者单独开启了⼀个项⽬Disque专⻔⽤来做多播消息Beta版本,但是相应的客户端sdk已经⾮常丰富了,就待Redis作者临⻔⼀脚发布⼀个Release版本。关于Disque的更多细节,本⼩册不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论