标签:
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合。pub /sub不仅仅解决发布者和订阅者直接代码级别耦合,也解决两者在物理部署上的耦合。
新建一个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(); } }
新建一个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(); } }
首先,运行订阅端(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发送消息。
标签:
原文地址:http://www.cnblogs.com/LOVE0612/p/5700287.html