如何使用jedis进行发布订阅
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进行发布订阅的更多相关文章
- Jedis实现发布订阅功能
Redis为我们提供了publish/subscribe(发布/订阅)功能.我们可以对某个channel(频道)进行subscribe(订阅),当有人在这个channel上publish(发布)消息时 ...
- Redis 发布订阅,小功能大用处,真没那么废材!
今天小黑哥来跟大家介绍一下 Redis 发布/订阅功能. 也许有的小伙伴对这个功能比较陌生,不太清楚这个功能是干什么的,没关系小黑哥先来举个例子. 假设我们有这么一个业务场景,在网站下单支付以后,需要 ...
- redis subscribe/publish(发布订阅)
redis的发布端 package dubbo.wangbiao.project.pubsub; import org.apache.commons.pool2.impl.GenericObjectP ...
- Redis学习笔记8--Redis发布/订阅
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似.pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者 ...
- 5. redis管道, 发布订阅, 模拟队列
一. 发布订阅 #订阅scribe 127.0.0.1:6379> SUBSCRIBE "channel_1" Reading messages... (press Ctrl ...
- Spring Boot使用Redis进行消息的发布订阅
今天来学习如何利用Spring Data对Redis的支持来实现消息的发布订阅机制.发布订阅是一种典型的异步通信模型,可以让消息的发布者和订阅者充分解耦.在我们的例子中,我们将使用StringRedi ...
- java实现 redis的发布订阅(简单易懂)
redis的应用场景实在太多了,现在介绍一下它的几大特性之一 发布订阅(pub/sub). 特性介绍: 什么是redis的发布订阅(pub/sub)? Pub/Sub功能(means Publ ...
- redis发布订阅Java代码实现
Redis除了可以用作缓存数据外,另一个重要用途是它实现了发布订阅(pub/sub)消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. 为了实现redis的发布订阅机制,首先要打开re ...
- 补习系列(13)-springboot redis 与发布订阅
目录 一.订阅发布 常见应用 二.Redis 与订阅发布 三.SpringBoot 与订阅发布 A. 消息模型 B. 序列化 C. 发布消息 D. 接收消息 小结 一.订阅发布 订阅发布是一种常见的设 ...
随机推荐
- IO多路复用深入浅出
前言 从零单排高性能问题,这次轮到异步通信了.这个领域入门有点难,需要了解UNIX五种IO模型和 TCP协议,熟练使用三大异步通信框架:Netty.NodeJS.Tornado.目前所有标榜异步的通信 ...
- Linux下非root用户安装软件的一般流程:
1. 获取源代码,一般是wget方式,ubuntu可以使用apt-get source来获取源代码. 2. 解压源代码,一般使用tar -zxvf xxx.tar.gz即可 3. 切换到解压后的目录, ...
- android调用系统相机
Intent intent = new Intent(); intent.setPackage("com.android.camera"); intent.setAction(Me ...
- springcloud(六):配置中心(一)
随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多.某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错.配置 ...
- 使用Dockerfile构建镜像-Docker for Web Developers(5)
1.理解Dockerfile语法 语法命令 命令功能 举例 FROM 所有的dockerfile都必须以FROM命令指定镜像基于哪个基础镜像来制作 FROM ubuntu:14:04 MAINTAIN ...
- struts2.1.6教程四、OGNL与ValueStack(VS)
1.值栈入门 下面我们建立struts2ognl项目来练习ognl的使用. 步骤一.搭建strust2的开发环境 步骤二.建立LoginAction,主要代码如下: package com.asm; ...
- 我和 flow.ci 的第一次亲密接触
编者按:本文转载自 flow.ci 用户 @君赏 的实践分享,原文链接这里. 这不是第一次听说 flow.ci ,记得当时 fir.im 新出这个服务的时候,我也是心情十分激动的去尝试,结果是只支持安 ...
- Weka算法介绍
RWeka (http://cran.r-project.org/web/packages/RWeka/index.html) : 1) 数据输入和输出 WOW():查看Weka函数的参数. Weka ...
- 地理位置 API
js获取地理位置的接口navigator.geolocation geolocation对象有三个方法 1.getCurrentPosition 2.watchPosition 3.clearWatc ...
- IBM WebSphere ESB入门指南
[TOC] 第一章 ESB介绍 本博客介绍一款ESB产品,IBM WebSphere ESB.ESB(Enterprise Service Bus)也即企业服务总线.ESB有很多产品,IBM的IBM ...