Redis: Jedis中publish/subscribe 使用

转载 2016年08月31日 16:19:02

在Redis早期版本就已经提供publish/subscribe 模式,该文使用Jedis客户端的一个小例子.

 

Jedis 类中提供:

在Jedis中提供 发布二进制编码 ,string字符串 以及pattern匹配模式三种方式来发布publish消息.

 

public Long publish(final String channel, final String message);

public Long publish(byte[] channel, byte[] message);

public List<String> pubsubChannels(String pattern) ;

 

同时提供 二进制编码和string字符串来订阅消息.

public void subscribe(BinaryJedisPubSub jedisPubSub, byte[]... channels)

public void subscribe(final JedisPubSub jedisPubSub, final String... channels)

 

在订阅消息中涉及到2个重要类.BinaryJedisPubSub 和JedisPubSub 类,这2个类用来处理收到消息时,对消息的逻辑处理.

public abstract class JedisPubSub {

}

public abstract class BinaryJedisPubSub {

}

这两个类为抽象类必须通过用户来实现该类. 这两个类中分别有重要的方法onMessage 当收到消息时需要处理.

public void onMessage(byte[] channel, byte[] message) {
  }

  public void onMessage(String channel, String message) {
  }

 

 

PublishMsg.Java  发布消息端:

 

[java] view plain copy
  1.    Jedis jedis = new Jedis("localhost");  
  2.    //发布Protocol Buffer 协议消息  
  3.      
  4.    Builder builder = UserBean.newBuilder();  
  5.    builder.setId(1000);  
  6.    UserBean userbean = builder.build();  
  7.    ByteArrayOutputStream output =new ByteArrayOutputStream();  
  8.    userbean.writeTo(output);  
  9.    long loop=0;  
  10. while (loop++<10000) {  
  11.     //发布userbean 二进制消息  
  12.     jedis.publish("userbean".getBytes(), output.toByteArray());  
  13.   
  14.     Thread.sleep(1000);  
  15. }   
  16.    jedis.disconnect();    


SubscribeMsg.java 订阅消息端:

[java] view plain copy
  1.    Jedis jedis = new Jedis("localhost");  
  2.      
  3.       //业务逻辑处理  
  4.    UserBeanListener l =new UserBeanListener();  
  5.    //订阅userbean二进制消息  
  6.    jedis.subscribe(l, "userbean".getBytes());  
  7.   
  8.    long loop=0;  
  9. while (loop++<10000)  
  10. {  
  11.     Thread.sleep(1000);  
  12. }   
  13.    jedis.disconnect();    


UserBeanListener.java 业务消息处理:

[java] view plain copy
  1. public class UserBeanListener extends BinaryJedisPubSub {  
  2.   
  3.     @Override  
  4.     public void onMessage(byte[] channel, byte[] message) {  
  5.           
  6.         try {  
  7.             UserBean u = UserBean.parseFrom(message);  
  8.             System.out.println(u.getId());  
  9.               
  10.         } catch (InvalidProtocolBufferException e) {  
  11.             // TODO Auto-generated catch block  
  12.             e.printStackTrace();  
  13.         }  
  14.     }  
  15.       
  16.       
  17. }  


UserMsg.proto  ProtocolBuffer协议文件:

[java] view plain copy
  1. message UserBean{  
  2.       
  3.     // ID(必需)  
  4.     required int32 id = 1;  
  5.   
  6. }  

phpredis subscribe超时问题及解决

问题描述redis提供了pub/sub功能,但在使用phpredis的subscribe时发现这样一个问题,代码如下(sub.php):...
  • qmhball
  • qmhball
  • 2016年09月18日 15:51
  • 3714

redis之发布与订阅(publish/subscribe模式)

发布与订阅(publish/subscribe)模式,简称为pub/sub模式,redis也实现了这种模式。redis提供的发布订阅命令 命令 用例和描述 subscribe subsc...
  • u011499747
  • u011499747
  • 2016年04月24日 12:30
  • 9550

Jedis对管道、事务以及Watch的操作详细解析

1、Pipeline 利用pipeline的方式从client打包多条命令一起发出,不需要等待单条命令的响应返回,而redis服务端会处理完多条命令后会将多条命令的处理结果打包到一起返回给客户端。所以...
  • liyantianmin
  • liyantianmin
  • 2016年06月08日 16:21
  • 6826

Redis: Jedis中publish/subscribe 使用

在Redis早期版本就已经提供publish/subscribe 模式,该文使用Jedis客户端的一个小例子.   Jedis 类中提供: 在Jedis中提供 发布二进制编码 ,string字符串 以...
  • sunning9001
  • sunning9001
  • 2015年10月14日 17:30
  • 3864

Jedis的Publish/Subscribe功能的使用

redis内置了发布/订阅功能,可以作为消息机制使用。所以这里主要使用Jedis的Publish/Subscribe功能。1、使用Spring来配置Jedis连接池 ...
  • javaloveiphone
  • javaloveiphone
  • 2016年11月21日 15:25
  • 2093

php redis pub/sub(Publish/Subscribe,发布/订阅的信息系统)之基本使用

一.场景介绍 最近的一个项目需要用到发布/订阅的信息系统,以做到最新实时消息的通知。经查找后发现了redis pub/sub(发布/订阅的信息系统)可以满足我的开发需求,而且学习成本和使用成本也比较...
  • resilient
  • resilient
  • 2018年01月09日 10:14
  • 25

Jedis的Publish/Subscribe功能的运用

一、Redis服务器端的安装和客户端Jedis的安装 1.下载Redis    下载地址:http://redis.googlecode.com/files/redis-2.4.8.tar.gz ...
  • a416090287
  • a416090287
  • 2012年06月20日 14:42
  • 1172

Jedis实现Publish/Subscribe功能

Redis为我们提供了publish/subscribe(发布/订阅)功能。我们可以对某个channel(频道)进行subscribe(订阅),当有人在这个channel上publish(发布)消息时...
  • lihao21
  • lihao21
  • 2015年09月11日 14:30
  • 15472

Jedis实现Publish/Subscribe功能(发布和订阅)

Jedis实现Publish/Subscribe功能 标签: JedisredisJedisPoolpublishsubscribe 2015-09-11 14:30 3176人阅读 评论...
  • xiejunxing
  • xiejunxing
  • 2016年10月21日 17:38
  • 881

【数据库开发】C++测试redis中的publish/subscribe

运用 http://blog.csdn.net/xumaojun/article/details/51558237 中的redis_publisher.hredis_publisher.cpp r...
  • LG1259156776
  • LG1259156776
  • 2017年01月20日 22:45
  • 467
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Redis: Jedis中publish/subscribe 使用
举报原因:
原因补充:

(最多只允许输入30个字)