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. }  

相关文章推荐

Redis: Jedis中publish/subscribe 使用

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

Jedis的Publish/Subscribe功能的使用

redis内置了发布/订阅功能,可以作为消息机制使用。所以这里主要使用Jedis的Publish/Subscribe功能。1、使用Spring来配置Jedis连接池 ...

Jedis实现Publish/Subscribe功能

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

Jedis的Publish/Subscribe功能的运用

一、Redis服务器端的安装和客户端Jedis的安装 1.下载Redis    下载地址:http://redis.googlecode.com/files/redis-2.4.8.tar.gz ...

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

Jedis实现Publish/Subscribe功能 标签: JedisredisJedisPoolpublishsubscribe 2015-09-11 14:30 3176人阅读 评论...

Redis pub/sub(Publish,Subscribe)

目录 Redis pub/sub(Publish,Subscribe) 1、         Pub/Sub功能 2、         Pub/Sub机制 3、      ...

C++测试redis中的publish/subscribe

运用 http://blog.csdn.net/xumaojun/article/details/51558237 中的redis_publisher.h redis_publisher.cpp ...

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

发布与订阅(publish/subscribe)模式,简称为pub/sub模式,redis也实现了这种模式。redis提供的发布订阅命令 命令 用例和描述 subscribe subsc...

RabbitMQ消息分发模式----"Publish/Subscribe"发布/订阅模式

介绍 我们都是基于一个队列发送和接受消息。  前面讲的几种,不管是生产者端还是消费者端都必须知道一个指定的QueueName才能发送、获取消息。  而RabbitMQ消息模型的核心思想是生产者不会...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Redis: Jedis中publish/subscribe 使用
举报原因:
原因补充:

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