本文共 4531 字,大约阅读时间需要 15 分钟。
本地测试redis的pub/sub功能,本地主要是redis的缺陷,服务重启时会丢失信息的问题。发现redis的pub/sub功能还是比较薄弱,对于大量消息队列来说,不太合适,舍弃掉
import redis.clients.jedis.JedisPubSub;public class RedisMsgPubSubListener extends JedisPubSub { @Override public void unsubscribe() { super.unsubscribe(); } @Override public void unsubscribe(String... channels) { super.unsubscribe(channels); } @Override public void subscribe(String... channels) { super.subscribe(channels); } @Override public void psubscribe(String... patterns) { super.psubscribe(patterns); } @Override public void punsubscribe() { super.punsubscribe(); } @Override public void punsubscribe(String... patterns) { super.punsubscribe(patterns); } @Override public void onMessage(String channel, String message) { System.out.println("channel:" + channel + " receives message :" + message);// this.unsubscribe(); } @Override public void onPMessage(String pattern, String channel, String message) { System.out.println("onPMessage==="+"channel:" + channel + " pub message :" + message+" pattern:"+pattern); } @Override public void onSubscribe(String channel, int subscribedChannels) { System.out.println("channel:" + channel + "is been subscribed:" + subscribedChannels); } @Override public void onPUnsubscribe(String pattern, int subscribedChannels) { System.out.println("pattern:" + pattern + "is been unPSubscribeed:" + subscribedChannels); } @Override public void onPSubscribe(String pattern, int subscribedChannels) { System.out.println("pattern:" + pattern + "is been PSubscribeed:" + subscribedChannels); } @Override public void onUnsubscribe(String channel, int subscribedChannels) { System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels); }}
import org.junit.Test;import redis.clients.jedis.Jedis;public class TestPublish { @Test public void testPublish() throws Exception{ Jedis jedis = new Jedis("api.dev.lexue.com",16479); jedis.auth("lexue@nosql"); jedis.publish("redisChatTest", "我是天才"); Thread.sleep(5000); jedis.publish("redisChatTest", "我牛逼"); Thread.sleep(5000); jedis.publish("redisChatTest", "哈哈"); }}
import org.junit.Test;import redis.clients.jedis.Jedis;public class TestSubscribe { public static void main(String args[]) throws Exception{ Jedis jedis = new Jedis("api.dev.lexue.com",16479); jedis.auth("lexue@nosql"); RedisMsgPubSubListener listener = new RedisMsgPubSubListener(); jedis.subscribe(listener, "redisChatTest"); System.out.println("test sub"); //other code }}
@RequestMapping(value = "/testPublish") public void testPublish(HttpServletRequest request, HttpServletResponse response)throws Exception{ response.setContentType("text/javascript"); Jedis jedis = new Jedis("api.dev.lexue.com",16479); jedis.auth("lexue@nosql"); jedis.publish("redisChatTest", "1111111"); jedis.publish("redisChatTest1", "咦咦咦咦咦"); LOG.info("testPublish 1"); Thread.sleep(5000); jedis.publish("redisChatTest", "2222222"); jedis.publish("redisChatTest1", "鹅鹅鹅鹅鹅鹅"); LOG.info("testPublish 2"); Thread.sleep(5000); jedis.publish("redisChatTest", "33333333"); jedis.publish("redisChatTest1", "哈哈哈哈哈哈"); LOG.info("testPublish 3"); } @RequestMapping(value = "/testSubscribe1") public void testSubscribe1(HttpServletRequest request, HttpServletResponse response)throws Exception{ response.setContentType("text/javascript"); Jedis jedis = new Jedis("api.dev.lexue.com",16479); jedis.auth("lexue@nosql"); RedisMsgPubSubListener listener = new RedisMsgPubSubListener(); jedis.psubscribe(listener, "redisChatTest*");// jedis.subscribe(listener, "redisChatTest1"); LOG.info("testSubscribe1"); } @RequestMapping(value = "/testSubscribe2") public void testSubscribe2(HttpServletRequest request, HttpServletResponse response)throws Exception{ response.setContentType("text/javascript"); Jedis jedis = new Jedis("api.dev.lexue.com",16479); jedis.auth("lexue@nosql"); RedisMsgPubSubListener listener = new RedisMsgPubSubListener(); jedis.subscribe(listener, "redisChatTest1"); LOG.info("testSubscribe2"); }参考地址:http://blog.csdn.net/u011734144/article/details/51782085