redis實現消息隊列的若干疑惑

相關疑惑

1.發佈者如何知道訂閱者是否知道消息git

2.若是隻有部分訂閱者接收到消息,發佈者應該如何處理redis

redis消息隊列

利用redis的pub/sub實現消息隊列,固然也能夠使用redis的隊列實現,只不是須要線程,會形成延時和線程空轉而引發的內存消耗。 發佈者經過publish發佈消息.net

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實現收到消息code

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

相關文章
相關標籤/搜索