栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

redis 发布订阅实际案例(redistemplate发布订阅)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

redis 发布订阅实际案例(redistemplate发布订阅)

pom.xml

 
        
            com.alibaba
            fastjson
            1.2.68
        
        
            redis.clients
            jedis
            3.3.0
        

        
            org.slf4j
            slf4j-log4j12
            1.7.30
        
    

log4j.properties

log4j.rootLogger=info,stdout,all

# --- stdout ---
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.encoding=UTF-8
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.conversionPattern=[%d{HH:mm:ss,SSS}] [%p] %C{1}.%M --> %m%n

# --- all ---
log4j.appender.all=org.apache.log4j.DailyRollingFileAppender
log4j.appender.all.encoding=UTF-8
log4j.appender.all.append=true
log4j.appender.all.datePattern='.'yyyy-MM-dd
log4j.appender.all.file=log/all.log
log4j.appender.all.layout=org.apache.log4j.PatternLayout
log4j.appender.all.layout.conversionPattern=[%d{HH:mm:ss,SSS}] [%p] %C{1}.%M --> %m%n

RedisManager.java // 负责连接池的创建,获取连接

package org.example.redis;

import redis.clients.jedis.JedisPool;

public class RedisManager {
    private static JedisPool pool = new JedisPool("127.0.0.1", 6379);

    public static JedisPool getPool() {
        return pool;
    }
}

RedisConst.java // 消息频道

package org.example.redis;

public class RedisConst {
    
    public static final String MSG1_SUB = "MSG1_SUB";
}
订阅类

IRedisMsgHandler.java

package org.example.redis;

public interface IRedisMsgHandler {
    void handle(String channelName, String strMsg);
}

RedisSubService.java

package org.example.redis.sub;

import org.example.redis.IRedisMsgHandler;
import org.example.redis.RedisConst;
import org.example.redis.RedisManager;
import org.example.redis.sub.impl.Msg1SubMsgHandler;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class RedisSubService {
    private static Map subHandlerMap = new HashMap<>();

    
    public static void init() {
        initHandler();
        sub();

        System.out.println("redis订阅初始化完毕!!!");
    }

    // 初始化订阅哪些对象
    private static void initHandler() {
        subHandlerMap.put(RedisConst.MSG1_SUB, new Msg1SubMsgHandler());
    }

    private static void sub() {
        ExecutorService es = Executors.newSingleThreadExecutor((r) -> {
            Thread t = new Thread(r);
            t.setName("sub");
            return t;
        });

        es.submit(() -> {
            try (Jedis jedis = RedisManager.getPool().getResource()) {
                jedis.subscribe(new JedisPubSub() {
                    @Override
                    public void onMessage(String channelName, String strMsg) {
                        onMsg(channelName, strMsg);
                    }
                }, subHandlerMap.keySet().toArray(new String[0]));
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
    }

    
    private static void onMsg(String channelName, String strMsg) {
        IRedisMsgHandler handler = subHandlerMap.get(channelName);
        if (handler != null) {
            handler.handle(channelName, strMsg);
        }
    }
}

Msg1SubMsgHandler.java

package org.example.redis.sub.impl;

import org.example.redis.IRedisMsgHandler;


public class Msg1SubMsgHandler implements IRedisMsgHandler {
    @Override
    public void handle(String channelName, String strMsg) {
        System.out.println(channelName + ":" + strMsg);
    }
}

SubMain.java

package org.example;

import org.example.redis.sub.RedisSubService;

public class SubMain {
    public static void main(String[] args) {
        RedisSubService.init();
    }
}


发布类

RedisPubService.java

package org.example.redis.pub;

import org.example.redis.RedisManager;
import redis.clients.jedis.Jedis;

public class RedisPubService {
    public static void publish(String channelName, String strMsg){
        try(Jedis jedis = RedisManager.getPool().getResource()){
            jedis.publish(channelName, strMsg);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

PubMain.java  // 发布消息

package org.example;

import com.alibaba.fastjson.JSON;
import org.example.msg.UserOnline;
import org.example.redis.RedisConst;
import org.example.redis.pub.RedisPubService;

public class PubMain {
    public static void main(String[] args) {
        RedisPubService.publish(RedisConst.MSG1_SUB, JSON.toJSonString(new Useronline("jianan", 18)));
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/773688.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号