记一次Redis发布订阅与websocket联用

记一次Redis发布订阅与websocket联用

编程菜鸟,首次发帖,记录一下近期工作中使用到了redis的发布订阅模式。
项目要求使用websocket与后端交互,并且需要两个系统的应用同步,所以想到了使用redis的发布订阅模式来实现后端的数据实时同步功能。

消息生产者

public void sendMessage () {
        Jedis resource = jedisPool.getResource();
        resource.publish("你的频道","你的消息");
        resource.close();
}

编写监听器

public class Listener extends JedisPubSub {

    @Override
    public void onMessage(String channel, String message) {
        super.onMessage(channel, message);
        // 此处可以接收到生产者推送的信息,并进行相关的操作
    }
}

消费者

	// 声明一个监听器
    Listener listener = new Listener();
    // 当页面连接时创建一个消费者线程
    @OnOpen
    public void onOpen (Session session, String msg) {
        // 利用线程池创建一个消费者
        ExecutorService thread = Executors
        	.newSingleThreadExecutor((r) -> new Thread(r,"线程名称"));
        thread.submit(new Thread(() -> {
            Jedis resource = jedisPool.getResource();
            resource.subscribe(listener,"监听的频道名");
        }));
        // 消费者声明之后会一直保持阻塞状态,声明后立刻调用shutdown()方法
        thread.shutdown();
    }

    // 页面关闭操作
    @OnClose
    public void onClose() throws IOException {
        // 页面关闭时取消订阅某个频道,此时线程不再阻塞,任务结束,线程停止
        listener.unsubscribe("监听的频道名");
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值