java redis 订阅 发布_java实现redis发布订阅实例

本文介绍了使用Java的Jedis库实现Redis的发布/订阅功能。通过创建R.java配置Redis服务器信息,Base.java进行连接的初始化和销毁,PubSubHello.java进行发布和订阅操作,SimpleJedisPubSub.java处理接收到的消息。首先订阅频道,然后发布消息,消息处理器会打印接收到的消息。
摘要由CSDN通过智能技术生成

Redis发布/订阅主要用到 subscribe、unsubscribe 和 publish 三个命令,在这个实现中,发送者(发送信息的客户端)不是将信息直接发送给特定的接收者(接收信息的客户端),而是将信息发送给频道(channel),然后由频道将信息转发给所有对这个频道感兴趣的订阅者。下面将使用java来实现一个简单的发布订阅实例。

开发环境eclipase

junit(单元测试)

log4j(日志框架)

jedis(Redis java jar包)

如下图:

88e86162f9fee93d7f8ac705035dfc7d.png

实现代码

1、R.java文件,该文件维护Redis服务器信息。代码如下:package com.huangx;

/**

* Redis服务器常量信息

*

* @author Administrator

* @date 2017年2月22日 15:08:57

*/

public class R {

private R() {}

/**

* Redis服务器IP

*/

public static final String SERVER_IP = "192.168.1.21";

/**

* Redis服务器端口

*/

public static final int SERVER_PORT = 6379;

}

2、Base.java文件,JUnit测试基础类,用于在方法调用前后初始化/销毁Redis连接。代码如下:package com.huangx;

import org.apache.log4j.Logger;

import org.junit.After;

import org.junit.Before;

import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPool;

/**

* JUnit测试基础类

*

* @author Administrator

* @date 2017年2月22日 15:09:33

*/

public class Base {

protected Logger logger = Logger.getLogger(getClass());

protected JedisPool pool;

protected Jedis jedis;

@Before

public void before() {

try {

logger.debug("开始初始化连接");

pool = new JedisPool(R.SERVER_IP, R.SERVER_PORT);

jedis = pool.getResource();

logger.debug("连接建立完成");

} catch(Exception e) {

logger.debug("初始化连接失败!", e);

}

}

@After

public void after() {

if ( jedis != null ) {

jedis.close();

}

if ( pool != null ) {

pool.destroy();

}

jedis = null;

pool = null;

}

}

3、PubSubHello.java文件,发布/订阅简单的应用。代码如下:package com.huangx.simple;

import org.junit.Test;

import com.huangx.Base;

import com.huangx.SimpleJedisPubSub;

/**

* Redis第一个简单的发布/订阅应用

*

* @author Administrator

* @date 2017年2月22日 15:20:11

*/

public class PubSubHello extends Base {

static final String CHANNEL_NAME = "channel_base";

/**

* 订阅频道。(频道{@link CHANNEL_NAME})

*/

@Test

public void subscribe() {

// 订阅并监听发布的消息

this.jedis.subscribe(new SimpleJedisPubSub(), CHANNEL_NAME);

}

/**

* 发布消息

*/

@Test

public void publish() {

this.jedis.publish(CHANNEL_NAME, "hi! 简单的发布/订阅实例");

logger.debug("发布消息成功");

}

}

4、SimpleJedisPubSub.java文件,消息处理器。代码如下:package com.huangx;

import org.apache.log4j.Logger;

import redis.clients.jedis.JedisPubSub;

/**

* JedisPubSub默认实现

*

* @author Administrator

* @date 2017年2月22日 15:37:59

*/

public class SimpleJedisPubSub extends JedisPubSub {

private Logger logger = Logger.getLogger(getClass());

/**

* 退订时调用

*/

@Override

public void onUnsubscribe(String paramString, int paramInt) {

logger.debug("onUnsubscribe [" +

paramString + ", " + paramInt + "]");

}

/**

* 订阅时调用

*/

@Override

public void onSubscribe(String paramString, int paramInt) {

logger.debug("onSubscribe [" +

paramString + ", " + paramInt + "]");

}

/**

* 接收非模式匹配发布消息

*/

@Override

public void onMessage(String paramString1, String paramString2) {

logger.debug("onMessage [" +

paramString1 + ", " + paramString2 + "]");

}

/**

* 模式退订时调用

*/

@Override

public void onPUnsubscribe(String paramString, int paramInt) {

logger.debug("onPUnsubscribe [" +

paramString + ", " + paramInt + "]");

}

/**

* 模式订阅时调用

*/

@Override

public void onPSubscribe(String paramString, int paramInt) {

logger.debug("onPSubscribe [" +

paramString + ", " + paramInt + "]");

}

/**

* 接收模式匹配发布的消息

*/

@Override

public void onPMessage(String paramString1, String paramString2,

String paramString3) {

logger.debug("onPMessage [" + paramString1

+ ", " + paramString2 + ", " + paramString3 + "]");

}

}

log4j配置文件如下:log4j.rootLogger=all, console

# console appender

log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.appender.console.layout=org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n

注意:

先运行subscribe方法,订阅一个频道,并且监听服务器发布消息。然后,运行publish方法发布一条消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值