jedis实现发布订阅,是通过让发布者和订阅者同时对某个channel(频道)进行操作,订阅者订阅了某个频道例如channel1,发布者往这个channel1里面publish东西,在pubsublistener的回调中就能收到这个消息。

代码如下:

源码工程:链接: https://pan.baidu.com/s/1nuSY99B 密码: huni

1、订阅者

package redis;

import redis.clients.jedis.Jedis;

class Subscribe {  

    public void redisSubscriber(final Jedis redisClient, final RedisMsgPubSubListener listener,final String channel ) {
new Thread(new Runnable() {
public void run() {
System.out.println("订阅了:"+channel);
redisClient.subscribe(listener, channel);
}
}).start();
}
public static void main(String args[]){
new Subscribe().redisSubscriber(new RedisHelper().getJedis(), new RedisMsgPubSubListener(), "channel1");
}
}

2.发布者

package redis;

import redis.clients.jedis.Jedis;

public class Publish {
public void redisPublish(final Jedis redisClient,String channel,String message) throws Exception{
redisClient.publish(channel,message);
}
public static void main(String args[]){
try {
new Publish().redisPublish(new RedisHelper().getJedis(),"channel1","我是天才");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

3、redishelper

package redis;
import redis.clients.jedis.Jedis; /**
* Created by cmq on 2017/1/9.
*/
public class RedisHelper {
public Jedis getJedis(){
Jedis jedis = new Jedis("222.201.145.215");
jedis.select(1);
return jedis;
}
}

4、RedisMsgPubSubListener

package redis;

import redis.clients.jedis.JedisPubSub;  

public class RedisMsgPubSubListener extends JedisPubSub {  

    public void unsubscribe() {
super.unsubscribe();
} public void unsubscribe(String... channels) {
super.unsubscribe(channels);
} public void subscribe(String... channels) {
super.subscribe(channels);
} public void psubscribe(String... patterns) {
super.psubscribe(patterns);
} public void punsubscribe() {
super.punsubscribe();
} public void punsubscribe(String... patterns) {
super.punsubscribe(patterns);
} public void onMessage(String channel, String message) {
System.out.println("channel:" + channel + "receives message :" + message);
try {
new Publish().redisPublish(new RedisHelper().getJedis(), "channel1", message+"第二次publish");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// this.unsubscribe();
} public void onPMessage(String pattern, String channel, String message) { } public void onSubscribe(String channel, int subscribedChannels) {
System.out.println("channel:" + channel + " is been subscribed:" + subscribedChannels);
} public void onPUnsubscribe(String pattern, int subscribedChannels) { } public void onPSubscribe(String pattern, int subscribedChannels) { } public void onUnsubscribe(String channel, int subscribedChannels) {
System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels);
}
}

如何使用jedis进行发布订阅的更多相关文章

  1. Jedis实现发布订阅功能

    Redis为我们提供了publish/subscribe(发布/订阅)功能.我们可以对某个channel(频道)进行subscribe(订阅),当有人在这个channel上publish(发布)消息时 ...

  2. Redis 发布订阅,小功能大用处,真没那么废材!

    今天小黑哥来跟大家介绍一下 Redis 发布/订阅功能. 也许有的小伙伴对这个功能比较陌生,不太清楚这个功能是干什么的,没关系小黑哥先来举个例子. 假设我们有这么一个业务场景,在网站下单支付以后,需要 ...

  3. redis subscribe/publish(发布订阅)

    redis的发布端 package dubbo.wangbiao.project.pubsub; import org.apache.commons.pool2.impl.GenericObjectP ...

  4. Redis学习笔记8--Redis发布/订阅

    发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似.pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者 ...

  5. 5. redis管道, 发布订阅, 模拟队列

    一. 发布订阅 #订阅scribe 127.0.0.1:6379> SUBSCRIBE "channel_1" Reading messages... (press Ctrl ...

  6. Spring Boot使用Redis进行消息的发布订阅

    今天来学习如何利用Spring Data对Redis的支持来实现消息的发布订阅机制.发布订阅是一种典型的异步通信模型,可以让消息的发布者和订阅者充分解耦.在我们的例子中,我们将使用StringRedi ...

  7. java实现 redis的发布订阅(简单易懂)

    redis的应用场景实在太多了,现在介绍一下它的几大特性之一   发布订阅(pub/sub). 特性介绍: 什么是redis的发布订阅(pub/sub)?   Pub/Sub功能(means Publ ...

  8. redis发布订阅Java代码实现

    Redis除了可以用作缓存数据外,另一个重要用途是它实现了发布订阅(pub/sub)消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. 为了实现redis的发布订阅机制,首先要打开re ...

  9. 补习系列(13)-springboot redis 与发布订阅

    目录 一.订阅发布 常见应用 二.Redis 与订阅发布 三.SpringBoot 与订阅发布 A. 消息模型 B. 序列化 C. 发布消息 D. 接收消息 小结 一.订阅发布 订阅发布是一种常见的设 ...

随机推荐

  1. 「CODVES 1922 」骑士共存问题(二分图的最大独立集|网络流)&dinic

    首先是题目链接  http://codevs.cn/problem/1922/ 结果发现题目没图(心情复杂 然后去网上扒了一张图 大概就是这样了. 如果把每个点和它可以攻击的点连一条边,那问题就变成了 ...

  2. [Open Source] RabbitMQ 高可用集群方案

    简介 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模式.镜像模式 Rabb ...

  3. java面向对象--包及访问控制符

    多人开发同一个项目时,会出现类名称相同的情况.package就是为了避免类或接口名称重复而采用的一种措施.实际上包就是有一定层次结构的文件夹,*.class文件要保存当前类声明的和包对应的文件夹中. ...

  4. iOS tableView移除某一行的分割线 让分割线宽度为整个cell的宽度

    移除tableViewCell中某一行的分割线 有2种方法 1. 移除系统的分割线,自己定义每行的分割线 self.tableView.separatorStyle = UITableViewCell ...

  5. Iterator(es6)

    1.任何数据结构只要部署了Iterator接口(本质是一个指针对象),也就是部署了Symbol.iterator属性,便可以完成遍历操作:数组原生就具备Iterator接口,就可以用for...of遍 ...

  6. Hibernate与Jpa的关系(1)

    [转自:http://freewind.me/blog/20111129/588.html ] 我知道Jpa是一种规范,而Hibernate是它的一种实现.除了Hibernate,还有EclipseL ...

  7. 使用babel编译es6

    起因:开发中慢慢的学习使用es6,但是JavaScript需要浏览器来解析,而不是所有浏览器都支持es6,所以为了兼容es6,需要第三方工具进行编译es6. 工具:node,gulp,gulp-bab ...

  8. python 字典的常见操作

    字典 字典的增删改查 字典的创建方式: # 创建字典类型 info = { 'name':'李白', ', 'sex':'男' } msg = { 'user01':'Longzeluola', 'u ...

  9. NodeJs的简单介绍

    Nodejs是由谷歌v8运行.c++编写的js运行的环境,这里需要记住的是Nodejs只是一个环境.  目前很多主流网站都是使用nodejs,如知乎等大型的网站. 我们关于nodejs学习目标:安装N ...

  10. React-Native集成到已有项目中的总结

    安装Python 从官网下载并安装python 2.7.x(3.x版本不行) 安装node.js 从官网下载node.js的官方V6.X.X版本或更高版本.安装完成后检测是否安装成功:node -v ...