文章目录
1.消息发布者:实现消息发布的功能
package com.ruoyi.project.redis.messgaeQueue;
import redis.clients.jedis.Jedis;
/**
* 消息发布者
* 1.建立两个Jedis客户端
* 2.建立两个发布/订阅监听器
* 3.启动两个线程。分别用于监听频道和模式
*/
public class MessagePublisher {
@SuppressWarnings("resource")
public static void main(String[] args) {
final Jedis jedis = new Jedis("127.0.0.1", 6379);
final Jedis pjedis = new Jedis("127.0.0.1", 6380);
final MessageSubscriber listener = new MessageSubscriber();
final MessageSubscriber plistener = new MessageSubscriber();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
jedis.subscribe(listener, "mychannel");
}
});
Thread pthread = new Thread(new Runnable() {
@Override
public void run() {
pjedis.psubscribe(plistener, "mychannel.*");
}
});
thread.start();
pthread.start();
}
}
2.消息订阅者:实现消息的订阅消费功能
package com.ruoyi.project.redis.messgaeQueue;
import redis.clients.jedis.JedisPubSub;
/**
* 消息订阅者
* 监听器会对频道和模式的订阅,接收消息和退订等事件进行监听,然后进行相应的处理
*/
public class MessageSubscriber extends JedisPubSub {
//消息订阅成功的处理
public void onMessage(String channel, String message) {
System.out.println("onMessage:" + channel + "=" + message);
if (message.equals("quit")) {
this.unsubscribe(channel);
}
}
//订阅初始化
public void onSubscribe(String channel, int subscribedChannels) {
System.out.println("onSubscribe:" + channel + "=" + subscribedChannels);
}
//取消订阅
public void onUnsubscribe(String channel, int subscribedChannels) {
System.out.println("onUnsubscribe:" + channel + "=" + subscribedChannels);
}
//按模式的方式订阅
public void onPSubscribe(String pattern, int subscribedChannels) {
System.out.println("onPSubscribe:" + pattern + "=" + subscribedChannels);
}
//取消模式方式的订阅
public void onPUnsubscribe(String pattern, int subscribedChannels) {
System.out.println("onPUnsubscribe:" + pattern + "=" + subscribedChannels);
}
//处理消息订阅模式
public void onPMessage(String pattern, String channel, String message) {
System.out.println("onPMessage:" + pattern + "=" + channel + "=" + message);
if (message.equals("quit")) {
this.punsubscribe(pattern);
}
}
}
3.按照上面说明完成基础配置
3.2 在启动2个Redis服务端
完成启动Redis服务后,运行main方法,如下,项目处于消息订阅状态
D:\software\Redis>redis-server D:\software\Redis\redis.windows-6379.conf
D:\software\Redis>redis-server D:\software\Redis\redis.windows-6380.conf
3.1在启动2个Redis客户端
D:>cd D:\software\Redis
D:\software\Redis>redis-cli -p 6379
D:\software\Redis>redis-cli -p 6380
3.2 分别在两个客户端中执行以下命令发送消息
publish mychannel “hello redis”
publish mychannel.redis “hello redis”