jedis的发布订阅-spring

1.创建线程任务保证项目启动就开始执行监听redis订阅任务,创建类RedisPubTaskService:

代码如下:

public class RedisPubTaskService {

    public static ThreadPoolExecutor threadPool = null;

    public static ScheduledExecutorService service = Executors.newScheduledThreadPool(3);
    

    static {

        threadPool = new ThreadPoolExecutor(8,
                40,
                20,
                TimeUnit.SECONDS,
                new LinkedBlockingQueue());
        threadPool.allowCoreThreadTimeOut(true);

    }

}

2.创建类RedisSubService集成类JedisPubSub;

代码如下:

@Service
public class RedisSubService extends JedisPubSub {

    public static MdbDataImpl commonmdb = CommonmdbBeanUtil.getCommonmdb();
    @Autowired
    private WechatPublicNumService wechatPublicNumService;


    @Override
    public void onMessage(String s, String s1) {
        System.out.println("收到了发布消息:" + s + ";内容:" + s1);
    }

    /**
     * 监听订阅频道收到的消息
     *
     * @param pattern
     * @param channel 频道
     * @param message 消息体
     */
    @Override
    public void onPMessage(String pattern, String channel, String message) {
        System.out.println("收到来自公众号端的订阅消息,channel=" + channel + ";消息内容:message=" + message);
        System.out.println("putTimeaa-" + DateUtils.formatDate("yyy-MM-dd HH:mm:ss", new Date()) + "   messageaa-" + message);
        System.out.println("onPMessage pattern "
                + pattern + " " + channel + " " + message);
        if (!StringUtil.isEmpty(message)) {
            System.out.println("收到了订阅消息:" + message);
            //同步公众号评论消息到小程序
            wechatPublicNumService.subRedisComment(message);
        }
    }

    @Override
    public void onSubscribe(String pattern, int subscribedChannels) {
        System.out.println("*******putTime-" + DateUtils.formatDate("yyy-MM-dd HH:mm:ss", new Date()) + "   messageaa-" + subscribedChannels);
        System.out.println("onPSubscribe "
                + pattern + " " + subscribedChannels);
    }

    @Override
    public void onUnsubscribe(String s, int i) {

    }

    @Override
    public void onPUnsubscribe(String s, int i) {

    }

    @Override
    public void onPSubscribe(String s, int i) {
        System.out.println("====================" + s);
    }
}

3.创建一个类负责启动订阅任务

代码如下:

@Service
public class RedisCommentSubListener {


    static String redisHost = PropertiesUtil.getProperties("config.properties", "redis.sub.host");    
    static int redisPort = Integer.parseInt(PropertiesUtil.getProperties("config.properties", "redis.sub.port"));
    static String redisPassword = PropertiesUtil.getProperties("config.properties", "redis.sub.password");

    @Autowired
    private RedisSubService redisSubService;


    /**
     * 执行redis订阅,频道为(channel):miniprogram_msg_list
     */
    public RedisCommentSubListener() {
        System.out.println("****StartRedisExpireListenerService 构造开始");
        RedisPubTaskService.service.schedule(new Runnable() {
            @Override
            public void run() {
                System.out.println("p-" + DateUtils.formatDate("yyy-MM-dd HH:mm:ss", new Date()));
                try {
                    System.out.println("*******开始构造 pid-" + Thread.currentThread().getId());
                    JedisPool pool = null;
                    if (StringUtil.isEmpty(redisPassword)) {
                        pool = new JedisPool(new JedisPoolConfig(), redisHost, redisPort, 2000);
                    } else {
                        pool = new JedisPool(new JedisPoolConfig(), redisHost, redisPort, 2000, redisPassword);
                    }

                    Jedis jedis = pool.getResource();
                    //开始订阅公众号端的评论消息
                    jedis.psubscribe(redisSubService, "miniprogram_msg_list");
                } catch (Exception e) {
                    System.out.println("****redis key 过期监听线程启动失败");
                    e.printStackTrace();
                }
            }
        }, 20, TimeUnit.SECONDS);
        System.out.println("****StartRedisExpireListenerService 构造结束");
    }


}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值