SpringBoot+Redis 實現訊息訂閱釋出
導讀 | Redis 通常在專案中用的最多的功能是快取,然而今天為你介紹它的另一個功能,輕量級的訊息佇列。 |
Redis 提供了釋出訂閱功能,可以用於訊息的傳輸,Redis 的釋出訂閱機制包括三個部分,釋出者,訂閱者和 Channel(稱之為頻道或主題)。
釋出者將訊息釋出到指定頻道,訂閱該頻道的訂閱者就能夠接受到這條訊息,如果有多個訂閱者,那麼他們會接受到相同的訊息。
Redis 採用 PUBLISH 傳送訊息,其返回值為接收到該訊息的訂閱者的數量。
Redis 採用 SUBSCRIBE 訂閱某個頻道,其返回值包括客戶端訂閱的頻道,目前已訂閱的頻道數量,以及接收到的訊息,其中subscribe表示已經成功訂閱了某個頻道。
模式匹配功能允許客戶端訂閱符合某個模式的頻道,Redis採用PSUBSCRIBE訂閱符合某個模式所有頻道,用“ * ”表示模式,“ * ”可以被任意值代替。
假設客戶端同時訂閱了某種模式和符合該模式的某個頻道,那麼傳送給這個頻道的訊息將被客戶端接收到兩次,只不過這兩條訊息的型別不同,一個是 message 型別,一個是 pmessage 型別,但其內容相同。
Redi s採用 UNSUBSCRIBE 和 PUNSUBSCRIBE 命令取消訂閱,其返回值與訂閱類似。由於Redis的訂閱操作是阻塞式的,因此一旦客戶端訂閱了某個頻道或模式,就將會一直處於訂閱狀態直到退出。在 SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE 和 PUNSUBSCRIBE 命令中,其返回值都包含了該客戶端當前訂閱的頻道和模式的數量,當這個數量變為0時,該客戶端會自動退出訂閱狀態。
pringboot 如何整合 redis 我這裡就不講了,相信對你來說也沒有一點問題。我們直接上程式碼
@Configuration public class RedisSubConfig { public static final String SUB_KEY = "chat";//頻道channel /** * redis訊息監聽器容器 * 可以新增多個監聽不同話題的redis監聽器,只需要把訊息監聽器和相應的訊息訂閱處理器繫結,該訊息監聽器 * 透過反射技術呼叫訊息訂閱處理器的相關方法進行一些業務處理 * @param connectionFactory * @param listenerAdapter * @return */ @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); //訂閱了一個頻道 container.addMessageListener(listenerAdapter, new PatternTopic(RedisSubConfig.SUB_KEY)); return container; } /** * 訊息監聽器介面卡,繫結訊息處理器,利用反射技術呼叫訊息處理器的業務方法 * @param receiver * @return */ @Bean MessageListenerAdapter listenerAdapter(RedisReceiver receiver) { return new MessageListenerAdapter(receiver, "receiveMessage"); } /** * redis 讀取內容的template * @param connectionFactory * @return */ @Bean StringRedisTemplate template(RedisConnectionFactory connectionFactory) { return new StringRedisTemplate(connectionFactory); } }
@Service public class RedisReceiver { public void receiveMessage(String message) { System.out.println("接收訊息:" + message); } }
@EnableScheduling //開啟定時器功能 @Component public class MessageSender { @Autowired private StringRedisTemplate stringRedisTemplate; @Scheduled(fixedRate = 5000) //間隔5s 透過StringRedisTemplate物件向redis訊息佇列chat頻道釋出訊息 public void sendMessage(){ stringRedisTemplate.convertAndSend("chat", "hello "+ new Date()); } }
執行結果
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2854716/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Redis實現訊息釋出訂閱Redis
- js訊息訂閱和釋出實現元件之間通訊JS元件
- Redis的訊息釋出和訂閱Redis
- 使用Spring Data Redis 釋出訂閱訊息SpringRedis
- 釋出於訂閱訊息系統-KafkaKafka
- Redis 釋出訂閱模式:原理拆解並實現一個訊息佇列Redis模式佇列
- C++釋出訂閱者模式:實現簡單訊息傳遞系統C++模式
- node 訂閱釋出及實現
- vue - Vue腳手架/訊息訂閱與釋出Vue
- 輕鬆上手 PHP + RabbitMQ 訊息釋出與訂閱PHPMQ
- springboot整合redis實現訊息釋出訂閱模式-雙通道(跨多伺服器)Spring BootRedis模式伺服器
- 基於Redis訊息的訂閱釋出應用場景Redis
- ZMQ釋出-訂閱模式踩坑之——訊息丟失部分MQ模式
- js 實現簡單釋出訂閱模式JS模式
- [實戰]laravel + redis訂閱釋出 +swoole實現實時訂單通知LaravelRedis
- 釋出-訂閱方式實現非同步併發非同步
- Redis 設計與實現 (六)--釋出訂閱Redis
- paho實現MQTTClient釋出訊息MQQTclient
- Kafka(分散式釋出-訂閱訊息系統)工作流程說明Kafka分散式
- 面試官:請實現Javascript釋出-訂閱模式面試JavaScript模式
- openGauss 釋出訂閱
- 釋出訂閱模式模式
- Redis釋出訂閱Redis
- 釋出訂閱EventEmitterMIT
- 小程式訊息推送訂閱
- 如何實現一個簡單的釋出訂閱模式模式
- Redis(設計與實現):---釋出與訂閱介紹Redis
- 通過釋出訂閱模式實現的事件委託模式事件
- 設計模式之釋出訂閱模式(2) Redis 釋出/訂閱模式設計模式Redis
- openGauss-釋出訂閱
- mqtt訂閱和釋出MQQT
- LightDB訂閱和釋出
- JS訂閱釋出模式JS模式
- 釋出訂閱管道化
- RabbitMQ釋出訂閱實戰-實現延時重試佇列MQ佇列
- 小程式傳送訂閱訊息
- 利用redis的hash結構搭建訊息服務(發訊息,訂閱訊息,消費訊息,退訂)Redis
- RabbitMQ 入門(六)SpringAMQP五種訊息型別(釋出訂閱模式和Fanout Exchange )MQSpringGAM型別模式