最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用Redis實(shí)現(xiàn)消息訂閱/發(fā)布的幾種方式

 更新時(shí)間:2025年08月12日 10:41:48   作者:二九筒  
Redis 提供了 Pub/Sub (發(fā)布/訂閱) 模式,允許客戶端訂閱頻道并接收發(fā)布到這些頻道的消息,以下是 Java 中使用 Redis 實(shí)現(xiàn)消息訂閱的幾種方式,需要的朋友可以參考下

Redis 提供了 Pub/Sub (發(fā)布/訂閱) 模式,允許客戶端訂閱頻道并接收發(fā)布到這些頻道的消息。以下是 Java 中使用 Redis 實(shí)現(xiàn)消息訂閱的幾種方式。

1. 使用 Jedis 客戶端

添加依賴

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.3.1</version>
</dependency>

基本訂閱示例

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
 
public class RedisSubscriber {
    public static void main(String[] args) {
        // 創(chuàng)建 Jedis 連接
        Jedis jedis = new Jedis("localhost", 6379);
        
        // 創(chuàng)建訂閱者
        JedisPubSub subscriber = new JedisPubSub() {
            @Override
            public void onMessage(String channel, String message) {
                System.out.println("收到消息 - 頻道: " + channel + ", 內(nèi)容: " + message);
            }
            
            @Override
            public void onSubscribe(String channel, int subscribedChannels) {
                System.out.println("訂閱成功 - 頻道: " + channel);
            }
        };
        
        // 訂閱頻道
        jedis.subscribe(subscriber, "myChannel");
    }
}

發(fā)布消息

import redis.clients.jedis.Jedis;
 
public class RedisPublisher {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        jedis.publish("myChannel", "Hello, Redis Pub/Sub!");
        jedis.close();
    }
}

2. 使用 Lettuce 客戶端 (推薦)

Lettuce 是另一個(gè)流行的 Redis Java 客戶端,支持響應(yīng)式編程。

添加依賴

<dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
    <version>6.2.3.RELEASE</version>
</dependency>

訂閱示例

import io.lettuce.core.RedisClient;
import io.lettuce.core.pubsub.RedisPubSubListener;
import io.lettuce.core.pubsub.StatefulRedisPubSubConnection;
import io.lettuce.core.pubsub.api.sync.RedisPubSubCommands;
 
public class LettuceSubscriber {
    public static void main(String[] args) {
        RedisClient client = RedisClient.create("redis://localhost");
        StatefulRedisPubSubConnection<String, String> connection = client.connectPubSub();
        
        connection.addListener(new RedisPubSubListener<String, String>() {
            @Override
            public void message(String channel, String message) {
                System.out.println("收到消息 - 頻道: " + channel + ", 內(nèi)容: " + message);
            }
            
            @Override
            public void message(String pattern, String channel, String message) {
                // 模式匹配的消息
            }
            
            @Override
            public void subscribed(String channel, long count) {
                System.out.println("訂閱成功 - 頻道: " + channel);
            }
            
            // 其他需要實(shí)現(xiàn)的方法...
        });
        
        RedisPubSubCommands<String, String> sync = connection.sync();
        sync.subscribe("myChannel");
        
        // 保持程序運(yùn)行以持續(xù)接收消息
        try {
            Thread.sleep(Long.MAX_VALUE);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        connection.close();
        client.shutdown();
    }
}

3. Spring Data Redis 集成

如果你使用 Spring Boot,可以更方便地集成 Redis Pub/Sub,這也是比較常用的方式

添加依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置 Redis 容器

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
 
@Configuration
public class RedisConfig {
    
    @Bean
    public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                                 RedisMessageSubscriber subscriber) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(subscriber, new ChannelTopic("myChannel"));
        return container;
    }
}

配置訂閱

import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.stereotype.Component;
 
@Component
public class RedisMessageSubscriber implements MessageListener {
 
    @Override
    public void onMessage(Message message, byte[] pattern) {
        System.out.println("收到消息: " + new String(message.getBody()));
    }
}

發(fā)布消息

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
 
@Service
public class RedisMessagePublisher {
    
    private final RedisTemplate<String, Object> redisTemplate;
    
    public RedisMessagePublisher(RedisTemplate<String, Object> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }
    
    public void publish(String message) {
        redisTemplate.convertAndSend("myChannel", message);
    }
}

高級(jí)功能

模式匹配訂閱:可以使用 psubscribe 訂閱匹配模式的頻道

取消訂閱

處理連接斷開:實(shí)現(xiàn) onPMessageonPUnsubscribe 等方法處理各種事件

//模式匹配訂閱
// Jedis
jedis.psubscribe(subscriber, "news.*");
 
// Lettuce
sync.psubscribe("news.*");
 
 
//取消訂閱
subscriber.unsubscribe("myChannel");
subscriber.punsubscribe("news.*");

以上就是Java使用Redis實(shí)現(xiàn)消息訂閱/發(fā)布的幾種方式的詳細(xì)內(nèi)容,更多關(guān)于Java Redis消息訂閱/發(fā)布的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 關(guān)于Gateway路由匹配規(guī)則解讀

    關(guān)于Gateway路由匹配規(guī)則解讀

    本文詳細(xì)介紹了SpringCloudGateway的路由匹配規(guī)則,包括基本概念、常用屬性、實(shí)際應(yīng)用以及注意事項(xiàng),路由匹配規(guī)則決定了請(qǐng)求如何被轉(zhuǎn)發(fā)到目標(biāo)服務(wù),是Gateway的核心功能之一,在配置路由時(shí)需要注意順序、性能和安全性
    2025-02-02
  • Springboot的啟動(dòng)原理詳細(xì)解讀

    Springboot的啟動(dòng)原理詳細(xì)解讀

    這篇文章主要介紹了Springboot的啟動(dòng)原理詳細(xì)解讀,springboot項(xiàng)目一般都是打包成jar包直接運(yùn)行main方法啟動(dòng),當(dāng)然也可以跟傳統(tǒng)的項(xiàng)目一樣打包war包放在tomcat里面啟動(dòng).那么springboot怎么直接通過main方法啟動(dòng)呢,需要的朋友可以參考下
    2023-11-11
  • centos7中如何優(yōu)雅的動(dòng)態(tài)切換jdk版本實(shí)例詳解

    centos7中如何優(yōu)雅的動(dòng)態(tài)切換jdk版本實(shí)例詳解

    這篇文章主要介紹了CentOS7安裝多版本jdk并切換jdk版本的完整步驟,文中通過代碼詳細(xì)介紹使用alternatives命令管理多個(gè)JDK版本,步驟包括安裝不同JDK、配置alternatives及切換版本驗(yàn)證,需要的朋友可以參考下
    2026-06-06
  • SpringMVC @RequestMapping注解作用詳解

    SpringMVC @RequestMapping注解作用詳解

    通過@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • .NET到Java遷移的完整指南

    .NET到Java遷移的完整指南

    在技術(shù)領(lǐng)域,轉(zhuǎn)型通常意味著漫長的學(xué)習(xí)和陣痛期,然而,對(duì)于經(jīng)驗(yàn)豐富的.NET開發(fā)者而言,轉(zhuǎn)向Java并非從零開始,本指南摒棄泛泛而談,聚焦于利用你已有的.NET思維模式和工程經(jīng)驗(yàn),通過一條高度壓縮、直擊要害的路徑,將你的技能無縫、快速地映射到Java宇宙
    2025-12-12
  • 反對(duì)使用Spring封裝的多線程類原因

    反對(duì)使用Spring封裝的多線程類原因

    這篇文章主要介紹了反對(duì)使用Spring封裝的多線程類原因,文章圍繞主題展開詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • 詳解Java線程池如何實(shí)現(xiàn)優(yōu)雅退出

    詳解Java線程池如何實(shí)現(xiàn)優(yōu)雅退出

    這篇文章我們將從源碼角度深度解析線程池是如何優(yōu)雅的退出程序的,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)java線程池有一定幫助,需要的可以參考一下
    2022-07-07
  • 系統(tǒng)運(yùn)維問題排查-java內(nèi)存過高分析及說明

    系統(tǒng)運(yùn)維問題排查-java內(nèi)存過高分析及說明

    本文總結(jié)了監(jiān)控Java進(jìn)程內(nèi)存與線程狀態(tài)的常用命令及參數(shù),包括top排序、jmap查看內(nèi)存分布、jstat分析GC數(shù)據(jù)、jstack解析線程狀態(tài)等,強(qiáng)調(diào)需使用與進(jìn)程一致的用戶執(zhí)行,并解析了線程狀態(tài)和內(nèi)存區(qū)域的含義
    2025-07-07
  • MyBatisPlus實(shí)現(xiàn)自動(dòng)填充字段的實(shí)踐

    MyBatisPlus實(shí)現(xiàn)自動(dòng)填充字段的實(shí)踐

    MyBatis-Plus自動(dòng)填充功能可以在插入或更新數(shù)據(jù)時(shí)自動(dòng)填充字段,如創(chuàng)建時(shí)間和更新時(shí)間,本文就來詳細(xì)的介紹一下,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-10-10
  • Mybatis注解開發(fā)單表、多表操作的實(shí)現(xiàn)代碼

    Mybatis注解開發(fā)單表、多表操作的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Mybatis高級(jí):Mybatis注解開發(fā)單表操作,Mybatis注解開發(fā)多表操作,構(gòu)建sql語句,綜合案例學(xué)生管理系統(tǒng)使用接口注解方式優(yōu)化,需要的朋友可以參考下
    2021-02-02

最新評(píng)論

江油市| 晋江市| 泾阳县| 西贡区| 西平县| 惠州市| 东光县| 雷波县| 永福县| 禄劝| 出国| 香港 | 晴隆县| 平泉县| 尖扎县| 遵化市| 瑞丽市| 湘乡市| 冕宁县| 平昌县| 嘉兴市| 永年县| 措美县| 滕州市| 新竹市| 五莲县| 延长县| 广元市| 佛教| 永州市| 大田县| 旬邑县| 通州市| 乐山市| 沧州市| 黄梅县| 大关县| 宁城县| 桐庐县| 荆门市| 江华|