Java操作Redis(六)--Java操作Redis实现消息队列

文章目录

  • 1.消息发布者:实现消息发布的功能
  • 2.消息订阅者:实现消息的订阅消费功能
  • 3.按照上面说明完成基础配置
    • 3.2 在启动2个Redis服务端
    • 3.1在启动2个Redis客户端
    • 3.2 分别在两个客户端中执行以下命令发送消息

Java操作Redis(六)--Java操作Redis实现消息队列_第1张图片
Java操作Redis(六)--Java操作Redis实现消息队列_第2张图片

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

Java操作Redis(六)--Java操作Redis实现消息队列_第3张图片
Java操作Redis(六)--Java操作Redis实现消息队列_第4张图片
Java操作Redis(六)--Java操作Redis实现消息队列_第5张图片

3.1在启动2个Redis客户端

D:>cd D:\software\Redis
D:\software\Redis>redis-cli -p 6379
D:\software\Redis>redis-cli -p 6380

Java操作Redis(六)--Java操作Redis实现消息队列_第6张图片

3.2 分别在两个客户端中执行以下命令发送消息

publish mychannel “hello redis”
publish mychannel.redis “hello redis”
Java操作Redis(六)--Java操作Redis实现消息队列_第7张图片
Java操作Redis(六)--Java操作Redis实现消息队列_第8张图片

你可能感兴趣的:(Redis)