5.redis发布/订阅

来源:互联网 发布:kdl32w600d安装软件 编辑:程序博客网 时间:2024/06/01 10:03
<pre name="code" class="java"><span style="font-size:18px;"><strong>redis发布/订阅</strong></span>/** * 1.发布 */public class Publisher {        protected static Logger logger = LoggerFactory.getLogger(MessageTest.class);        public static final String CHANNEL_NAME = "commonChannel";//频道名称        //发布    public static void publish() {        JedisPoolConfig poolConfig = new JedisPoolConfig();        JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379, 0);        final Jedis publisherJedis = jedisPool.getResource();//发布        publisherJedis.publish(CHANNEL_NAME, "发布的消息aaa");        System.out.println("publisher over");                jedisPool.returnResource(publisherJedis);    }        public static void main(String[] args) {        publish();    }    }/** * 2.订阅--处理消息 */public class Subscriber extends JedisPubSub{     protected static Logger logger = LoggerFactory.getLogger(Subscriber.class);          // 取得订阅的消息后的处理        public void onMessage(String channel, String message) {          System.out.println("取得订阅的消息后的处理 : " + channel + "=" + message);      }       // 初始化订阅时候的处理        public void onSubscribe(String channel, int subscribedChannels) {          System.out.println("初始化订阅时候的处理 : " + channel + "=" + subscribedChannels);      }       // 取消订阅时候的处理        public void onUnsubscribe(String channel, int subscribedChannels) {          System.out.println("取消订阅时候的处理 : " + channel + "=" + subscribedChannels);      }              // 取得按表达式的方式订阅的消息后的处理        public void onPMessage(String pattern, String channel, String message) {          System.out.println("取得按表达式的方式订阅的消息后的处理 :" + pattern + "=" + channel + "=" + message);      }     // 初始化按表达式的方式订阅时候的处理        public void onPSubscribe(String pattern, int subscribedChannels) {          System.out.println("初始化按表达式的方式订阅时候的处理 : " + pattern + "=" + subscribedChannels);      }       // 取消按表达式的方式订阅时候的处理        public void onPUnsubscribe(String pattern, int subscribedChannels) {          System.out.println(" 取消按表达式的方式订阅时候的处理 : " + pattern + "=" + subscribedChannels);      }   } /** * SUBSCRIBE [channel...] 订阅一个匹配的通道 * PSUBSCRIBE [pattern...] 订阅匹配的通道 * PUBLISH [channel] [message] 将value推送到channelone通道中 * UNSUBSCRIBE [channel...] 取消订阅消息 * PUNSUBSCRIBE [pattern ...] 取消匹配的消息订阅 * web环境中可以编写一个JedisPubSub 继承 @see redis.clients.jedis.JedisPubSub来实现监听 * Jedis中通过使用 JedisPubSub.UNSUBSCRIBE/PUNSUBSCRIBE 来取消订阅 *//** * 3.发布/订阅 */public class MessageTest {        protected static Logger logger = LoggerFactory.getLogger(MessageTest.class);    public static final String CHANNEL_NAME = "commonChannel"; //频道        public static void main(String[] args) throws Exception {        JedisPoolConfig poolConfig = new JedisPoolConfig();        JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379, 0);        final Jedis subscriberJedis = jedisPool.getResource();//订阅        final Subscriber subscriber = new Subscriber();//消息的处理        new Thread(new Runnable() {            @Override            public void run() {                try {                    //subscribe方法会阻塞,需要另起线程                    subscriberJedis.subscribe(subscriber, CHANNEL_NAME);                } catch (Exception e) {                    logger.error("Subscribing failed.", e);                }            }        }).start();                Thread.sleep(2000);                //发布        Publisher.publish();                System.out.println("unsubscribe");        //subscriber.unsubscribe();//取消订阅        //jedisPool.returnResource(subscriberJedis);    }    }

参考: <a target=_blank href="http://outofmemory.cn/code-snippet/3866/redis-dingyue-publish-example">http://outofmemory.cn/code-snippet/3866/redis-dingyue-publish-example</a>


0 0