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

本文介绍如何使用 Redis 的发布/订阅 (Pub/Sub) 功能实现消息队列。主要内容包括发布者如何发送消息、订阅者如何接收消息,以及如何获取已接收消息的订阅者数量。此外还提供了一个具体的实现代码示例。

相关疑惑

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 **

转载于:https://my.oschina.net/xForMe/blog/484702

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值