redis实现发布订阅,实现监听消息的时候,需要实现JedisPubSub接口。 里面有些方法可以自己修改编写自己的业务,在订阅到消息和取消订阅相关的操作时会触发。
参考链接:http://blog.csdn.net/zhu_tianwei/article/details/41210671
package com.eastcom.first.spark.data.redis.pubsub;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class Utils {
public static JedisPoolConfig getJedisPoolConfig() {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(0);
config.setMaxWaitMillis(1000);
return config;
}
public static JedisPool getJedisPool() {
JedisPool pool = new JedisPool(getJedisPoolConfig(), "192.168.31.130", 6379, 60000, "root");
return pool;
}
public static Jedis getJedis() {
Jedis jedis = getJedisPool().getResource();
return jedis;
}
}
package com.eastcom.first.spark.data.redis.pubsub;
import redis.clients.jedis.JedisPubSub;
public class MyListener extends JedisPubSub {
// 取得订阅的消息后的处理
@Override
public void onMessage(String channel, String message) {
System.out.println("onMessage: channel[" + channel + "], message[" + message + "]");
}
// 取得按表达式的方式订阅的消息后的处理
@Override
public void onPMessage(String pattern, String channel, String message) {
System.out.println("onPMessage: pattern[" + pattern + "],channel[" + channel + "], message[" + message + "]");
}
// 初始化按表达式的方式订阅时候的处理
@Override
public void onPSubscribe(String channel, int subscribedChannels) {
System.out.println("onSubscribe: channel[" + channel + "]," + "subscribedChannels[" + subscribedChannels + "]");
}
// 取消按表达式的方式订阅时候的处理
@Override
public void onPUnsubscribe(String channel, int subscribedChannels) {
System.out.println(
"onUnsubscribe: channel[" + channel + "], " + "subscribedChannels[" + subscribedChannels + "]");
}
// 初始化订阅时候的处理
@Override
public void onSubscribe(String pattern, int subscribedChannels) {
System.out.println(
"onPUnsubscribe: pattern[" + pattern + "]," + "subscribedChannels[" + subscribedChannels + "]");
}
// 取消订阅时候的处理
@Override
public void onUnsubscribe(String pattern, int subscribedChannels) {
System.out
.println("onPSubscribe: pattern[" + pattern + "], " + "subscribedChannels[" + subscribedChannels + "]");
}
}
package com.eastcom.first.spark.data.redis.pubsub;
import redis.clients.jedis.Jedis;
public class Publisher {
public static void main(String[] args) {
Jedis jedis = Utils.getJedis();
jedis.publish("channel1", "message from channel1: hello world!");
jedis.publish("channel2", "message from channel2: we are the best!");
}
}
package com.eastcom.first.spark.data.redis.pubsub;
import redis.clients.jedis.Jedis;
public class Subscribe {
public static void main(String[] args) {
MyListener listener = new MyListener();
Jedis jedis = Utils.getJedis();
// jedis.subscribe(c, "channel1");//handle by onMessage()
jedis.psubscribe(listener, new String[] { "chan*" }); // handle by
// onPMessage()
}
}