jedis实现发布订阅,是通过让发布者和订阅者同时对某个channel(频道)进行操作,订阅者订阅了某个频道例如channel1,发布者往这个channel1里面publish东西,在pubsublistener的回调中就能收到这个消息。
代码如下:
源码工程:链接: https://pan.baidu.com/s/1nuSY99B 密码: huni
1、订阅者
package redis; import redis.clients.jedis.Jedis; class Subscribe { public void redisSubscriber(final Jedis redisClient, final RedisMsgPubSubListener listener,final String channel ) { new Thread(new Runnable() { public void run() { System.out.println("订阅了:"+channel); redisClient.subscribe(listener, channel); } }).start(); } public static void main(String args[]){ new Subscribe().redisSubscriber(new RedisHelper().getJedis(), new RedisMsgPubSubListener(), "channel1"); } }
2.发布者
package redis; import redis.clients.jedis.Jedis; public class Publish { public void redisPublish(final Jedis redisClient,String channel,String message) throws Exception{ redisClient.publish(channel,message); } public static void main(String args[]){ try { new Publish().redisPublish(new RedisHelper().getJedis(),"channel1","我是天才"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
3、redishelper
package redis; import redis.clients.jedis.Jedis; /** * Created by cmq on 2017/1/9. */ public class RedisHelper { public Jedis getJedis(){ Jedis jedis = new Jedis("222.201.145.215"); jedis.select(1); return jedis; } }
4、RedisMsgPubSubListener
package redis; import redis.clients.jedis.JedisPubSub; public class RedisMsgPubSubListener extends JedisPubSub { public void unsubscribe() { super.unsubscribe(); } public void unsubscribe(String... channels) { super.unsubscribe(channels); } public void subscribe(String... channels) { super.subscribe(channels); } public void psubscribe(String... patterns) { super.psubscribe(patterns); } public void punsubscribe() { super.punsubscribe(); } public void punsubscribe(String... patterns) { super.punsubscribe(patterns); } public void onMessage(String channel, String message) { System.out.println("channel:" + channel + "receives message :" + message); try { new Publish().redisPublish(new RedisHelper().getJedis(), "channel1", message+"第二次publish"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // this.unsubscribe(); } public void onPMessage(String pattern, String channel, String message) { } public void onSubscribe(String channel, int subscribedChannels) { System.out.println("channel:" + channel + " is been subscribed:" + subscribedChannels); } public void onPUnsubscribe(String pattern, int subscribedChannels) { } public void onPSubscribe(String pattern, int subscribedChannels) { } public void onUnsubscribe(String channel, int subscribedChannels) { System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels); } }