文档章节

redis实现消息队列的若干疑惑

OSC屠夫
 OSC屠夫
发布于 2015/07/28 15:18
字数 345
阅读 1088
收藏 11

相关疑惑

1.发布者如何知道订阅者是否知道消息

2.如果只有部分订阅者接收到消息,发布者应该如何处理

redis消息队列

利用redis的pub/sub实现消息队列,当然也可以使用redis的队列实现,只不是需要线程,会造成延时和线程空转而引起的内存消耗。 发布者通过publish发布消息

public Long publish(final String channel, final String message) {
	checkIsInMulti();
	connect();
	client.publish(channel, message);
	return client.getIntegerReply();
    }

返回得到接收到msg的订阅者数量 订阅监听器需要继承JedisPubSub来作为监听器,将发布者和订阅者之间进行持续链接,通过unsubscript取消订阅同时将关闭链接所占资源。

    public abstract void onMessage(String channel, String message);

    public abstract void onPMessage(String pattern, String channel,
	    String message);

    public abstract void onSubscribe(String channel, int subscribedChannels);

    public abstract void onUnsubscribe(String channel, int subscribedChannels);

    public abstract void onPUnsubscribe(String pattern, int subscribedChannels);

    public abstract void onPSubscribe(String pattern, int subscribedChannels);

最后通过subcript实现收到消息

public void subscribe(final JedisPubSub jedisPubSub,
	    final String... channels) {
	client.setTimeoutInfinite();
	jedisPubSub.proceed(client, channels);
	client.rollbackTimeout();
    }

订阅的时候将会执行JedisPubSub中onSubscribe方法 收到消息的时候将会执行JedisPubSub中onMessage方法

**欢迎加入193826252讨论 实现代码地址https://git.oschina.net/xForMe/fast_redis.git **

© 著作权归作者所有

OSC屠夫
粉丝 11
博文 33
码字总数 8631
作品 0
浦东
程序员
私信 提问
转:Redis消息队列的若干实现方式

微信号:neihanrukou Redis消息队列的若干实现方式 最近忙着用Redis实现一个消息通知系统,今天大概总结了一下技术细节,其中演示代码如果没有特殊说明,使用的都是PhpRedis扩展来实现的。 内...

fzxu_05
2013/03/04
6.3K
0
网站架构中为什么要用到消息队列

很多没有实际项目经验的小伙伴,对消息队列系统非常陌生,看着很多架构的介绍中,都提到消息队列。但是,不知道为什么要用消息队列?什么是消息队列?常见的消息队列产品有哪些? 通过阅读本...

kisshua
2015/12/04
603
0
关于redis结合java实现消息的pub/sub功能的一些疑惑。。

还没开始用jedis写个关于消息队列的helloworld出来,提前说一下疑惑,望各位大牛指点一下~ 消息发布与订阅在redis指令中就是publish(发布)与subscribe(订阅),订阅者监听发布者 那么问题...

上帝爱众生
2015/10/24
604
0
Redis实现消息队列

基于Redis消息队列-实现短信服务化 1.Redis实现消息队列原理 常用的消息队列有RabbitMQ,ActiveMQ,个人觉得这种消息队列太大太重,本文介绍下基于Redis的轻量级消息队列服务。 一般来说,消息...

voole
2016/08/07
2.9K
2
elasticsearch+logstash+kibana+redis

拓扑图: 根据拓扑图精简一下这个实验: 一台web server + logstash (真正生产可能是若干台) ===>192.168.1.13 一台redis(生产下一般会是主备,消息队列的作用) ===>192.168.1.12 一台logst...

limingyu0312
2018/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

让《强化学习(第2版)》架起一座通往强化学习经典知识宝库的桥梁

上交大计算科学与工程系俞凯教授,5分钟口述讲解,带你快速认识了解年度重磅图书《强化学习(第二版)》! 在 AlphaGo战胜李世石之后,AlphaZero以其完全凭借自我学习超越人类在各种棋类游戏...

博文视点Bv
4分钟前
2
0
TLA7-EVM开发板的处理器、NOR FLASH、DDR3

TLA7-EVM开发板是一款由广州创龙基于Xilinx Artix-7系列FPGA自主研发的核心板+底板方式的开发板,可快速评估FPGA性能。核心板尺寸仅70mm*50mm,底板采用沉金无铅工艺的6层板设计,专业的PCB...

Tronlong创龙
13分钟前
2
0
UUID的变种-有序

为了解决UUID无序的问题,NHibernate在其主键生成方式中提供了Comb算法(combined guid/timestamp)。保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime)。 /// <summary> //...

Canaan_
14分钟前
2
0
Netty学习(6)——通道间数据传输

1. FileChannel实现通道间的数据传输 在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel传输到另外一个channel。 transferFrom() FileChannel的transferF...

江左煤郎
17分钟前
2
0
AngularDOM操作

gtandsn
18分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部