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. 一步步学习EF Core(3.EF Core2.0路线图)

    前言 这几天一直在研究EF Core的官方文档,暂时没有发现什么比较新的和EF6.x差距比较大的东西. 不过我倒是发现了EF Core的路线图更新了,下面我们就来看看 今天我们来看看最新的EF Cor ...

  2. 【JAVAWEB学习笔记】19_事务

    事务 学习目标 案例-完成转账 一.事务概述 1.什么是事务 一件事情有n个组成单元 要不这n个组成单元同时成功 要不n个单元就同时失败 就是将n个组成单元放到一个事务中 2.mysql的事务 默认的 ...

  3. 进军VR虚拟现实-先来全景智慧城市-有梦想的互联网创业者

    随着VR的大火,越来越多的企业开始进军VR行业,不过并不是所有企业进军VR行业都是成功的,那么问题来了,VR虚拟现实行业投资怎么做才能取得成功呢?这是当下很多企业面临的一个问题,VR虚拟现实行业投资也 ...

  4. VR全景加盟-全景智慧城市携万千创业者决战BAT

    在所谓互联网思维走到末路.可穿戴设备基本昙花一现的大环境下,很多互联网人员转战VR市场,自然喜欢用互联网思维来考虑.笔者认识一些投资界人士,在谈到投资时,他们经常就问以下几句话:2B还是2C?将来有多 ...

  5. Log4j2 — Log4j2导入、LogEvent、配置文件编写及路径

    1. Log4j2的导入 首先到http://logging.apache.org/log4j/2.x/download.html 上下载最新的log4j2的jar包,然后再eclipse中加入log ...

  6. 简易数据加密传输电路(VHDL)(原创)

    LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.std_logic_unsigned.ALL; ENTITY KEKE IS --定义实体wsj ...

  7. 开涛spring3(7.3) - 对JDBC的支持 之 7.3 关系数据库操作对象化

    7.3.1  概述 所谓关系数据库对象化其实就是用面向对象方式表示关系数据库操作,从而可以复用. Spring JDBC框架将数据库操作封装为一个RdbmsOperation,该对象是线程安全的.可复 ...

  8. .Net Core应用搭建的分布式邮件系统设计

    本篇分享的是由NetCore搭建的分布式邮件系统,主要采用NetCore的Api和控制台应用程序,由于此系统属于公司的所以这里只能分享设计图和一些单纯不设计业务的类或方法: 为什么要在公司中首例采用N ...

  9. R语言:利用caret包中的dummyVars函数进行虚拟变量处理

    dummyVars函数:dummyVars creates a full set of dummy variables (i.e. less than full rank parameterizati ...

  10. 使用windows 命令行执行Git clone时出现Host key error

    由于是在java中执行cmd命令调用git clone,导致git读取不到用户的ssh key,需要设置环境变量Home为正确的用户路径: cmd /c set HOME=C:/Users/你的用户名 ...