一 前言

虽然有消息队列,我们还是要了解一下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发布订阅模式相关推荐

  1. 关于红帽订阅模式的常见问题

    政策和准则 关于红帽订阅模式的常见问题 有关红帽® 订阅模式的常见问题解答,包括如何在客户环境中使用产品和服务订阅.为什么优化和续订订阅非常重要.了解红帽订阅如何为确保安全.可靠运行系统提供您所需的一 ...

  2. RabbitMQ三种订阅模式

    订阅模式 Fanout Exchange--订阅模式 Direct Exchange--路由模式 Topic Exchange--通配符模式 Fanout Exchange 不处理路由键,只需要简单的 ...

  3. Java实现redis消息队列发布/订阅模式

    最近在一个老项目中需要用消息队列,本来想着用卡夫卡,但是试了几个版本之后发现jdk和卡夫卡版本一直对不上,最后选择用redis来实现消息队列的发布/订阅模式.感谢这位大佬的博客给了我很多的帮助,htt ...

  4. Java中使用发布订阅模式

    发布订阅者模式 概述 使用意图 使用场景 与MVC模式之间的关系 逻辑方法展示 代码演示 概述 发布订阅者模式其实在意图上等同于观察者模式,但是在结构上又有所不同. 在意图上,两者都是为对象创建一对多 ...

  5. Java实现发布订阅模式

    什么是发布订阅模式 发布订阅模式是软件开发者很常见的一种设计模式,很多开源库都使用了发布订阅模式,例如RxJava.EventBus.Vue等,所以学习该模式还是很有必要的. 该模式中存在一个或多个发 ...

  6. java自带的发布订阅模式

    1. 继承ApplicationEvent,定义基础事件 public class BaseEvent extends ApplicationEvent implements Serializable ...

  7. 【EventBus】发布-订阅模式 ( 使用代码实现发布-订阅模式 )

    文章目录 一.发布-订阅模式 二.代码实现发布-订阅模式 1.订阅者接口 2.订阅者实现类 3.发布者 4.调度中心 5.客户端 一.发布-订阅模式 发布订阅模式 : 发布者 Publisher : ...

  8. 利用zookeeper实现发布订阅模式

    zookeeper应用 发布订阅 zk实现的方式是推拉结合,Client想服务端注册自己需要关注的节点,一旦节点的数据发生变更,那么Server会向对应的客户端发送Watcher事件通知,客户端接收到 ...

  9. 观察者模式VS发布-订阅模式

    前言 观察者模式的大名,想必各位看官早已有所耳闻.从我们现实生活来说,微信公众号订阅.医院挂号叫号等都属于它的实际应用.在程序世界中,它是一种用于将代码解耦的设计模式,如果你想掌握并理解这种设计模式, ...

最新文章

  1. 【linux】shell中整数运算的加、减、乘、除
  2. 当红网络财富人生 用科技狂澜财富成为首富
  3. it转正述职报告_普通员工转正述职报告范文
  4. 根据根据图片的url怎么取得图片ImageView对象
  5. 录屏 模拟器_Scrcpy-在电脑无缝操作手机 (投屏/录屏/免Root)
  6. python面试题_春招苦短,我用百道Python面试题备战
  7. 抽屉效果_宜家靠边,好用不贵的全格收纳抽屉使用感受
  8. 为什么哲学是最难的学科_什么是哲学哲学对大师来说可能非常理论化,没有一定哲学基础肯能很难 爱问知识人...
  9. java实现扫雷小游戏【完整版】
  10. 网吧个性化系统的制作与优化(终极版)(转)
  11. 国内在线查看Java源码(支持下载)
  12. 【随笔】稚晖君软件硬件环境总结
  13. GG 。B的搜索技巧?
  14. 关于累加偶数奇数的c语言程序,c语言 在1-100之间,求所有奇数和偶数的个数和所有奇数和偶数的和(写到一个里面)...
  15. 使用cloudFlare实现动态DNS解析
  16. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
  17. 实例010 猴子吃桃
  18. IT职场生活工作感悟
  19. Java并发包中那些值得学习的并发工具类(空谈误国,实干兴邦,代码示范,抛砖引玉)
  20. ArcGIS Pro脚本工具(14)——裁剪文件夹或数据库(保留文件夹结构)

热门文章

  1. Java Duration类| 带示例的compareTo()方法
  2. 北航计算机学院博士机试考试题,北航2015考博真题回忆及全套资料 - 考博 - 小木虫 - 学术 科研 互动社区...
  3. stm32 ucosii消息队列 串口_STM32F1的UART4串口配置
  4. oracle v¥bh,【oracle笔记2】约束
  5. a byte of python图书购买_A Byte of Python
  6. python 三维图直方图_Python | 阶梯直方图
  7. da---tlc5615._CD-DA的完整形式是什么?
  8. 面试官:使用SpringBoot如何开发邮件发送系统?
  9. 面试官:数据量大的情况下分页查询很慢,有什么优化方案?
  10. 【Jetson-Nano】2.Tensorflow object API和Pytorch的安装