发布和订阅

  • 发布和订阅是一种消息通信模式。
  • 优点:使消息订阅者和消息发布者耦合度降低,类似设计模式中的观察者模式。
  • 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

学无止境,多学多记。

时间: 2024-11-07 01:12:24

发布和订阅的相关文章

Redis - 发布与订阅

发布与订阅(也叫PUB/SUB)的特点是订阅者(Listener)负责订阅频道(Channel),发送者(Publisher)负责向频道发送二进制字符串消息. 每当有消息被发送至给定频道时,频道的所有订阅者都会收到消息.也可以把频道看作是电台,其中订阅者可以同时收听多个电台,而发送者则可以在任何电台发送消息. 使用Redis订阅与发布功能应该注意. 第一个,于Redis系统的稳定性有关. 对于旧版的Redis,如果一个客户端订阅了某个或某些频道,但它读取消息的速度不够快的话,那么不断挤压的消息会

发布与订阅SQLServer

SQLServer 中发布与订阅 在对数据库做迁移的时候,会有很多方法,用存储过程,job,也可以用开源工具lettle,那么今天这些天变接触到了一种新的方法,就是SqlServer中自带的发布与订阅. 首先说明一下数据复制的流程.如下图A是(192.168.210.170)上的数据库,B是(172.23.100.109)上的数据库.把B当作数据源,然后A从B上获取数据. 发布前准备:首先两个服务器之间要能相互通讯,也就是能ping命令能通.   平时我们链接数据库的时候,经常都是用的ip登陆,

文成小盆友python-num12 Redis发布与订阅补充,python操作rabbitMQ

本篇主要内容: redis发布与订阅补充 python操作rabbitMQ 一,redis 发布与订阅补充 如下一个简单的监控模型,通过这个模式所有的收听者都能收听到一份数据. 用代码来实现一个redis的订阅者何消费者. 定义一个类: import redis class Redis_helper(): def __init__(self): self.__conn = redis.Redis(host='192.168.11.87') #创建一个连接 def pub(self, mes, c

SqlServer2005 数据库发布、订阅配置图文详解

一:准备条件 <1>软件准备条件 机器A端:SqlServer2005 Management Studio + WinServer 2003 Enterprise (作为发布服务器) 机器B端:Sqlserver2005 Management Studio Express + WinXP(作为订阅服务器) (可以用别的,不过订阅服务器版本不得高于发布服务器版本) <2>数据库复制准备条件 1. 所有被同步的数据表尽量要用主键,如果没有主键也没有关系,SqlServer会提示为表自动

【转】SQL Server 2008 数据库同步的两种方式 (发布、订阅)

上篇中说了通过SQL JOB的方式对数据库的同步,这一节作为上一节的延续介绍通过发布订阅的方式实现数据库之间的同步操作.发布订阅份为两个步骤:1.发布.2.订阅.首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发布进行订阅.发布可以发布一张表的部分数据,也可以对整张表进行发布.下面分别介绍发布.订阅的过程. 一.发布.发布需要用实际的服务器名称,不能使用服务器的IP地址进行.能发布的信息包括[表].[存储过程].[用户函数]如果使用IP会有错误,如下图: 具体发

自学总结redis第三部分(安全性、主从、哨兵、事物、持久化、发布与订阅、虚拟内存)

八.redis的安全性 因为redis速度相当快,所以在一台比较好的服务器下,一个外部用户在一秒内可以进行15W次的密码尝试,这意味着需要设定非常强大的密码来防止暴力破解. 可以通过设置密码以及登录redis方式来操作,具体参考 九.redis主从复制 9.1简介 1.Master可以拥有多个slave. 2.多个slave可以连接同一个master外,还可以连接到其他的slave. 3.主从复制不会阻塞master,在同步数据时,master可以继续处理client请求. 4.提供系统的伸缩性

Python redis 发布和订阅

发布和订阅 类似于RSS发布者:服务器订阅者:Dashboad和数据处理看下面代码:类文件名:monitor.py: #!/usr/bin/python # -*- coding: utf-8 -*- __author__ = 'gaogd' import redis class RedisHelper:     def __init__(self):         self.__conn = redis.Redis(host='192.168.10.12', port=6379, passw

SQL SERVER发布与订阅

一.配置分发 1.配置分发服务器,注:配置发布与订阅,连接SQLSERVER必须用服务器名登录 2.配置分发 3.选择分发服务器 4.选择快照文件夹 5.设置此文件夹的读写权限为everyone 6.选择分发数据库路径 7.配置分发 8.配置分发 9.配置分发完成 二.新建发布 1.新建发布 2.选择发布数据库 3.选择发布类型 4.选择发布对象 5.指定何时运行快照代理 6.代理安全性 7.创建发布 8.填写发布名称 9.新建发布完成 三.新建订阅 1. 新建订阅 2. 查找sqlserver

MSSQL复制中的发布与订阅

准备条件 1.2台服务器 2.WINDOWS SERVER 2008 64bit + 3.SQL SERVER 2008 R2 + 4.MSSQLSERVER服务与MSSQLAGENT服务正常运行中 三步曲 第一步 配置分发服务器 第二步 配置发布服务器 第三步 配置订阅服务器 小技巧 1.一般来说,分发服务器与发布服务器在同一个服务器上的同一个实例,也可不同实例,同样也可不同服务器,而订阅服务器存在于单独的服务器上.发布与订阅存在1对多关系,1个发布可以同时存在多个订阅. 2.配置订阅服务器可