相关疑惑
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 **