Redis學習筆記之十:Redis用作訊息佇列
阿新 • • 發佈:2018-12-25
package org.yamikaze.redis.messsage.subscribe; import org.yamikaze.redis.test.MyJedisFactory; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPubSub; import java.util.concurrent.TimeUnit; /** * 訊息訂閱方客戶端 * @author yamikaze */ public class SubscribeClient { private Jedis jedis; private static final String EXIT_COMMAND = "exit"; public SubscribeClient() { jedis = MyJedisFactory.getLocalJedis(); } public void subscribe(String ...channel) { if(channel == null || channel.length <= 0) { return; } //訊息處理,接收到訊息時如何處理 JedisPubSub jps = new JedisPubSub() { /** * JedisPubSub類是一個沒有抽象方法的抽象類,裡面方法都是一些空實現 * 所以可以選擇需要的方法覆蓋,這兒使用的是SUBSCRIBE指令,所以覆蓋了onMessage * 如果使用PSUBSCRIBE指令,則覆蓋onPMessage方法 * 當然也可以選擇BinaryJedisPubSub,同樣是抽象類,但方法引數為byte[] */ @Override public void onMessage(String channel, String message) { if(Publisher.CHANNEL_KEY.equals(channel)) { System.out.println("接收到訊息: channel : " + message); //接收到exit訊息後退出 if(EXIT_COMMAND.equals(message)) { System.exit(0); } } } /** * 訂閱時 */ @Override public void onSubscribe(String channel, int subscribedChannels) { if(Publisher.CHANNEL_KEY.equals(channel)) { System.out.println("訂閱了頻道:" + channel); } } }; //可以訂閱多個頻道 當前執行緒會阻塞在這兒 jedis.subscribe(jps, channel); } public static void main(String[] args) { SubscribeClient client = new SubscribeClient(); client.subscribe(Publisher.CHANNEL_KEY); //並沒有 unsubscribe方法 //相應的也沒有punsubscribe方法 } }