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

发布和订阅

时间:2016-04-06 20:17:10      阅读:422      评论:0      收藏:0      [点我收藏+]

标签:

  • 发布和订阅是一种消息通信模式。
  • 优点:使消息订阅者和消息发布者耦合度降低,类似设计模式中的观察者模式。
  • Redis 的发布和订阅

发布和订阅

订阅的命令如下:

// 订阅一个或多个频道
subscribe  channel1  channel2  channel3 ...
// 模式订阅,频道参数类似正则表达式
psubscribe abc*  xyz*  ...

发布命令如下: 

publish channel msg

启动一个订阅者客户端 X

订阅 cctv-1 返回三个参数:subscribe 订阅成功,订阅的频道是 cctv-1,当前订阅的频道个数为 1;

订阅 cctv-2 返回三个参数:subscribe 订阅成功,订阅的频道是 cctv-2,当前订阅的频道个数为 2。

技术分享

启动一个订阅者客户端 Y

订阅 cctv-* 返回三个参数:psubcribe 订阅成功,订阅的频道 cctv-*,当前客户端订阅的频道数量 1。

技术分享

启动一个发布者客户端,发布频道 cctv-1 的消息

技术分享

订阅者客户端 X 收到订阅信息,返回三个参数:收到消息成功,频道,收到的消息

技术分享

订阅者客户端 Y 收到订阅信息,返回四个参数:收到消息成功,模式订阅频道,收到消息的频道,收到的消息

技术分享

 

取消订阅

UNSUBSCRIBE  cctv-1
PUNSUBSCRIBE  cctv-*

取消订阅在官方给的客户端上是无法模拟的。

查看订阅

// 查看订阅的所有频道
pubsub  channels;
pubsub  channels  msg*;
// 查看该频道的订阅人数
pubsub  numsub  channel1 channel2 ... ;

技术分享 

技术分享

  • 编程展示 Redis 的发布和订阅
 1 public class MySub extends JedisPubSub{
 2 
 3     @Override
 4     public void onMessage(String channel, String msg) {
 5         System.out.println("onMessage - " + channel +" - " +msg);
 6     }
 7 
 8     @Override
 9     public void onPMessage(String pattern, String channel, String msg) {
10         System.out.println("onPMessage - " + pattern +" - "+ channel +" - " +msg);
11     }
12 
13     @Override
14     public void onPSubscribe(String channel, int msg) {
15         System.out.println("onPsubscribe - " + channel +" - "+ msg);
16     }
17 
18     @Override
19     public void onPUnsubscribe(String arg0, int arg1) {}
20 
21     @Override
22     public void onSubscribe(String channel, int number) {
23         System.out.println("onSubscribe - " + channel +" - "+ number);
24         
25     }
26 
27     @Override
28     public void onUnsubscribe(String arg0, int arg1) {}
29 }

订阅者客户端 A

1 public class SubClient {
2     public static void main(String[] args) {
3         MySub sub = new MySub();
4         Jedis jedis = new Jedis("127.0.0.1", 6379);
5         jedis.subscribe(sub, "cctv-1");
6     }
7 }

订阅者客户端 B (模式订阅)

1 public class PsubClient {
2     public static void main(String[] args) {
3         MySub sub = new MySub();
4         Jedis jedis = new Jedis("127.0.0.1", 6379);
5         jedis.psubscribe(sub, "cctv*");
6     }
7 }

发布者客户端 C

1 public class PubClient {
2     public static void main(String[] args) {
3         Jedis jedis = new Jedis("127.0.0.1", 6379);
4         jedis.publish("cctv-1", "hello,this is cctv-1");
5     }
6 }

依次运行客户端 ABC

A 端输出

onSubscribe - cctv-1 - 1
onMessage - cctv-1 - hello,this is cctv-1

B 端输出

onPsubscribe - cctv* - 1
onPMessage - cctv* - cctv-1 - hello,this is cctv-1

学无止境,多学多记。

发布和订阅

标签:

原文地址:http://www.cnblogs.com/xmsx/p/5360171.html

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