Redis: Jedis中publish/subscribe 使用

 

 

在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  发布消息端:

 

			    Jedis jedis = new Jedis("localhost");
			    //发布Protocol Buffer 协议消息
			    
			    Builder builder = UserBean.newBuilder();
			    builder.setId(1000);
			    UserBean userbean = builder.build();
			    ByteArrayOutputStream output =new ByteArrayOutputStream();
			    userbean.writeTo(output);
			    long loop=0;
				while (loop++<10000) {
					//发布userbean 二进制消息
					jedis.publish("userbean".getBytes(), output.toByteArray());

					Thread.sleep(1000);
				} 
			    jedis.disconnect();	


SubscribeMsg.java 订阅消息端:

	
	    Jedis jedis = new Jedis("localhost");
	    
        //业务逻辑处理
	    UserBeanListener l =new UserBeanListener();
	    //订阅userbean二进制消息
	    jedis.subscribe(l, "userbean".getBytes());

	    long loop=0;
		while (loop++<10000)
		{
			Thread.sleep(1000);
		} 
	    jedis.disconnect();	


UserBeanListener.java 业务消息处理:

public class UserBeanListener extends BinaryJedisPubSub {

	@Override
	public void onMessage(byte[] channel, byte[] message) {
		
		try {
			UserBean u = UserBean.parseFrom(message);
			System.out.println(u.getId());
			
		} catch (InvalidProtocolBufferException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
}


UserMsg.proto  ProtocolBuffer协议文件:

message UserBean{
	
	// ID(必需)
	required int32 id = 1;

}


 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值