码迷,mamicode.com
首页 > 其他好文 > 详细

redis(4)----发布订阅

时间:2016-07-24 11:58:54      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

 

一. redis发布订阅简介

        发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合。pub /sub不仅仅解决发布者和订阅者直接代码级别耦合,也解决两者在物理部署上的耦合。

二. 测试源码

    1. 首先启动redis

    2. 发布

        新建一个Java Project,然后再新建一个class,为其增加main方法来向redis发布消息:

package com.luych.message.publish;

import redis.clients.jedis.Jedis;

public class App 
{
    public static void main( String[] args )
    {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.publish("Channel1", "Hello!");
        jedis.publish("Channel2", "How do you do!");
        jedis.close();
    }
}

    3. 订阅

        新建一个Java Project,然后再新建一个class,继承JedisPubSub:

package com.luych.message.subscribe;

import redis.clients.jedis.JedisPubSub;

public class Subscriber extends JedisPubSub {

    @Override
    public void onMessage(String channel, String message) {
        System.out.println("收到消息,来自" + channel + ",消息内容:" + message);
        super.onMessage(channel, message);
    }

}

        onMessage方法,为接收到订阅消息时候所要执行的方法。

        再新建一个class,为其增加main方法来向redis订阅消息:

package com.luych.message.subscribe;

import redis.clients.jedis.Jedis;

public class App 
{
    public static void main( String[] args )
    {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.subscribe(new Subscriber(), "Channel1", "Channel2");
        jedis.close();
    }
}

    4. 测试运行

        首先,运行订阅端(Run As Java Application),可以看到当主进程执行到jedis.subscribe时,进程即被阻塞,进入消息监听状态。

        然后,运行发布端(Run As Java Application),发布端代码执行结束后,可以看到控制台已经打印出结果了。

收到消息,来自Channel1,消息内容:Hello!
收到消息,来自Channel2,消息内容:How do you do!

三. 后语

        上面这个例子非常简单,但是也可以看出redis在做发布订阅的优势了。pub /sub不仅仅解决了发布者和订阅者直接代码级别耦合,也解决了两者在物理部署上的耦合。redis作为一个pub/sub server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个 channel,也可以向多个channel发送消息。

redis(4)----发布订阅

标签:

原文地址:http://www.cnblogs.com/LOVE0612/p/5700287.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!