java 阅发布模式_redis发布订阅模式
一 前言
虽然有消息队列,我们还是要了解一下redis发布订阅模式哟!!!!!
二发布订阅模式
PUBLISH 命令向通道发送信息,此客户端称为publisher 发布者;
SUBSCRIBE 向命令通道订阅信息,此客户端称为subscriber 订阅者;
redis 中 发布订阅模块的名字叫着 PubSub,也就是 PublisherSubscriber;
一个发布者向一个通道发送消息,订阅者可以向多个通道订阅消息;当发布者向通道发布消息后,如果有订阅者订阅该通道,订阅者就会收到消息;这有点像电台,我收听了一个电台的频道,当频道发送消息后,我就能收到消息;
三PUBSub模块命令subscribe: 订阅一个或者多个频道;
unsubscribe: 退订一个或者多个频道;
publish: 向通道发送消息;
psubscribe: 订阅给定模式相匹配的所有频道;
punsubscribe: 退订 给定模式所有的频道,若未指定模式,退订所有频道;
具体的命令使用方式 可以使用 help 命令 ;示例如下:
help subscribe
四客户端实现
通过指令SUBSCRIBE订阅一个频道,如果频道不存在时则新建一个频道;此时此客户端就是订阅者127.0.0.1:6379> subscribe zszxz
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "zszxz"
3) (integer) 1
通过指令publish向通道发送一个消息;此时客户端就是发布者127.0.0.1:6379> publish zszxz "l miss you"
(integer) 1
127.0.0.1:6379>
我们再看看 客户端就收到消息了127.0.0.1:6379> subscribe zszxz
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "zszxz"
3) (integer) 1
1) "message"
2) "zszxz"
3) "l miss you"
五java 实现
定义2个订阅者用于订阅频道的消息,在使用jedis 时 需要 继承 JedisPubSub 类, 并重写 onMessage 方法; 订阅者可以在该方法里面进行消息的业务逻辑处理;
订阅者 1/\*\*
\* @Author lsc
\*
订阅者1号
\*/
@Component
public class Sub1 extends JedisPubSub {
@Override
public void onMessage(String channel, String message) {
System.out.println("sub1 channel is :"+ channel+ " mesage is :"+message);
}
}
订阅者2/\*\*
\* @Author lsc
\*
订阅者2号
\*/
@Component
public class Sub2 extends JedisPubSub {
@Override
public void onMessage(String channel, String message) {
System.out.println("sub2 channel is :"+ channel+ " mesage is :"+message);
}
}
发布者/\*\*
\* @Author lsc
\*
\*/
@Component
public class Pub {
public void publishMessage(Jedis jedis, String channel, String msg) {
jedis.publish(channel,msg);
}
}
测试类、
注意redis 的 发布订阅模式 是阻塞模式 ,一个订阅者需要 重新起一个线程;@Autowired
Pub pub;
@Autowired
JedisUtil jedisUtil;
@Autowired
Sub1 sub1;
@Autowired
Sub1 sub2;
@Test
public void test(){
new Thread(()\-> {
while (true){
jedisUtil.getJedis().subscribe(sub1,"zszxz");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//jedisUtil.getJedis().subscribe(sub2,"zszxz");
}).start();
pub.publishMessage(jedisUtil.getJedis(),"zszxz","l miss you");
}
六 缺点PubSub 的生产者来一个消息会直接传递给消费者。如果没有消费者,消息会直接丢弃。如果有多个消费者,一个消费者突然挂掉,生产者会继续发送消息,另外的消费者可以持续收到消息。但是挂掉的消费者重新连上后,断连期间的消息会彻底丢失;
如果 Redis 停机重启,PubSub 的消息是不会持久化
求关注
java 阅发布模式_redis发布订阅模式相关推荐
- 关于红帽订阅模式的常见问题
政策和准则 关于红帽订阅模式的常见问题 有关红帽® 订阅模式的常见问题解答,包括如何在客户环境中使用产品和服务订阅.为什么优化和续订订阅非常重要.了解红帽订阅如何为确保安全.可靠运行系统提供您所需的一 ...
- RabbitMQ三种订阅模式
订阅模式 Fanout Exchange--订阅模式 Direct Exchange--路由模式 Topic Exchange--通配符模式 Fanout Exchange 不处理路由键,只需要简单的 ...
- Java实现redis消息队列发布/订阅模式
最近在一个老项目中需要用消息队列,本来想着用卡夫卡,但是试了几个版本之后发现jdk和卡夫卡版本一直对不上,最后选择用redis来实现消息队列的发布/订阅模式.感谢这位大佬的博客给了我很多的帮助,htt ...
- Java中使用发布订阅模式
发布订阅者模式 概述 使用意图 使用场景 与MVC模式之间的关系 逻辑方法展示 代码演示 概述 发布订阅者模式其实在意图上等同于观察者模式,但是在结构上又有所不同. 在意图上,两者都是为对象创建一对多 ...
- Java实现发布订阅模式
什么是发布订阅模式 发布订阅模式是软件开发者很常见的一种设计模式,很多开源库都使用了发布订阅模式,例如RxJava.EventBus.Vue等,所以学习该模式还是很有必要的. 该模式中存在一个或多个发 ...
- java自带的发布订阅模式
1. 继承ApplicationEvent,定义基础事件 public class BaseEvent extends ApplicationEvent implements Serializable ...
- 【EventBus】发布-订阅模式 ( 使用代码实现发布-订阅模式 )
文章目录 一.发布-订阅模式 二.代码实现发布-订阅模式 1.订阅者接口 2.订阅者实现类 3.发布者 4.调度中心 5.客户端 一.发布-订阅模式 发布订阅模式 : 发布者 Publisher : ...
- 利用zookeeper实现发布订阅模式
zookeeper应用 发布订阅 zk实现的方式是推拉结合,Client想服务端注册自己需要关注的节点,一旦节点的数据发生变更,那么Server会向对应的客户端发送Watcher事件通知,客户端接收到 ...
- 观察者模式VS发布-订阅模式
前言 观察者模式的大名,想必各位看官早已有所耳闻.从我们现实生活来说,微信公众号订阅.医院挂号叫号等都属于它的实际应用.在程序世界中,它是一种用于将代码解耦的设计模式,如果你想掌握并理解这种设计模式, ...
最新文章
- 【linux】shell中整数运算的加、减、乘、除
- 当红网络财富人生 用科技狂澜财富成为首富
- it转正述职报告_普通员工转正述职报告范文
- 根据根据图片的url怎么取得图片ImageView对象
- 录屏 模拟器_Scrcpy-在电脑无缝操作手机 (投屏/录屏/免Root)
- python面试题_春招苦短,我用百道Python面试题备战
- 抽屉效果_宜家靠边,好用不贵的全格收纳抽屉使用感受
- 为什么哲学是最难的学科_什么是哲学哲学对大师来说可能非常理论化,没有一定哲学基础肯能很难 爱问知识人...
- java实现扫雷小游戏【完整版】
- 网吧个性化系统的制作与优化(终极版)(转)
- 国内在线查看Java源码(支持下载)
- 【随笔】稚晖君软件硬件环境总结
- GG 。B的搜索技巧?
- 关于累加偶数奇数的c语言程序,c语言 在1-100之间,求所有奇数和偶数的个数和所有奇数和偶数的和(写到一个里面)...
- 使用cloudFlare实现动态DNS解析
- 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
- 实例010 猴子吃桃
- IT职场生活工作感悟
- Java并发包中那些值得学习的并发工具类(空谈误国,实干兴邦,代码示范,抛砖引玉)
- ArcGIS Pro脚本工具(14)——裁剪文件夹或数据库(保留文件夹结构)
热门文章
- Java Duration类| 带示例的compareTo()方法
- 北航计算机学院博士机试考试题,北航2015考博真题回忆及全套资料 - 考博 - 小木虫 - 学术 科研 互动社区...
- stm32 ucosii消息队列 串口_STM32F1的UART4串口配置
- oracle v¥bh,【oracle笔记2】约束
- a byte of python图书购买_A Byte of Python
- python 三维图直方图_Python | 阶梯直方图
- da---tlc5615._CD-DA的完整形式是什么?
- 面试官:使用SpringBoot如何开发邮件发送系统?
- 面试官:数据量大的情况下分页查询很慢,有什么优化方案?
- 【Jetson-Nano】2.Tensorflow object API和Pytorch的安装