发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似。pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者在物理部署上的耦合。redis作为一个pub/sub server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个 channel,也可以向多个channel发送消息。
public class RedisMsgListener extends JedisPubSub {
private static final String channel = "redisChat";
@Override
public void onMessage(String channel, String message) {
System.out.println("channel:" + channel + ",receives message :" + message);
this.unsubscribe(channel);
}
@Override
public void onSubscribe(String channel, int subscribedChannels) {
System.out.println("channel:" + channel + ",been subscribed:" + subscribedChannels);
}
@Override
public void onUnsubscribe(String channel, int subscribedChannels) {
System.out.println("channel:" + channel + ",been unsubscribed:" + subscribedChannels);
}
@Test
public void testSubscribe() {
Jedis jedis = new Jedis("wugy11.top");
jedis.subscribe(new RedisMsgListener(), channel);
}
@Test
public void testPublish() {
Jedis jedis = new Jedis("wugy11.top");
jedis.publish(channel, "臭牛逼");
jedis.publish(channel, "哈哈");
}
}