精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Redis發布訂閱,右手就行!

開發 前端
Spring Data 為 Redis 提供了專用的消息傳遞集成,其功能和命名與 Spring Framework 中的 JMS 集成類似。

哈嘍,大家好,我是了不起。

Redis平常作為緩存使用較多,但是也可以作為發布訂閱的消息隊列來使用,本篇給大家介紹一下如何簡單使用!右手就能操作

前言

本篇我們會使用Spring Data Redis中集成的發布訂閱功能來展示這個示例,

先看我們需要的依賴, 其實只需要引入spring-boot-starter-data-redis 就夠了,另外再寫一個接口來觸發消息發布。

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

Spring Data 為 Redis 提供了專用的消息傳遞集成,其功能和命名與 Spring Framework 中的 JMS 集成類似。

Redis 消息傳遞大致可分為兩個功能領域:

  • 消息的發布或制作
  • 消息的訂閱或消費

其中主要的類都在這兩個包下面,感興趣的小伙伴可以去看看,原理就先不講了,下期再安排吧。

org.springframework.data.redis.connection
org.springframework.data.redis.listener

發布消息

發布消息我們可以直接使用RedisTemplate的 convertAndSend , 這個方法有兩個參數,分別是channel, 還有消息內容。

public Long convertAndSend(String channel, Object message) {
        Assert.hasText(channel, "a non-empty channel is required");
        byte[] rawChannel = this.rawString(channel);
        byte[] rawMessage = this.rawValue(message);
        return (Long)this.execute((connection) -> {
            return connection.publish(rawChannel, rawMessage);
        }, true);
    }

本次我們使用如下類來發布消息。作為示例就要簡單粗暴。

public interface MessagePublisher {
    void publish(String message);
}


import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic;

public class RedisMessagePublisher implements MessagePublisher {

    private RedisTemplate<String, Object> redisTemplate;
    private ChannelTopic topic;

    public RedisMessagePublisher() {
    }

    public RedisMessagePublisher(
            RedisTemplate<String, Object> redisTemplate, ChannelTopic topic) {
        this.redisTemplate = redisTemplate;
        this.topic = topic;
    }

    public void publish(String message) {
        redisTemplate.convertAndSend(topic.getTopic(), message);
    }
}

訂閱消息

訂閱消息需要實現MessageListener的接口 ,onMessage的方法是收到消息后的消費方法。

import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.stereotype.Service;

@Service
public class RedisMessageSubscriber implements MessageListener {
    
    public void onMessage(Message message, byte[] pattern) {
        System.*out*.println("Message received: " + message.toString());
    }

}

// 消息訂閱2
@Service("redisMessageSubscriber2")
public class RedisMessageSubscriber2 implements MessageListener {

    public void onMessage(Message message, byte[] pattern) {
        System.out.println("Message received2: " + message.toString());
    }

}

消息監聽容器和適配器

另外就是訂閱方訂閱發布者,SpringDataRedis這里使用了一個消息監聽容器和適配器來處理。我們直接貼出代碼:

import com.north.redis.message.MessagePublisher;
import com.north.redis.message.RedisMessagePublisher;
import com.north.redis.message.RedisMessageSubscriber;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Autowired
    private RedisConnectionFactory redisConnectionFactory;

    @Resource
    MessageListener redisMessageSubscriber2;
    
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        // 使用StringRedisSerializer來序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        // 使用GenericJackson2JsonRedisSerializer來序列化和反序列化redis的value值
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }

    @Bean
    MessageListenerAdapter messageListener() {
        return new MessageListenerAdapter(new RedisMessageSubscriber());
    }

    
    @Bean
    RedisMessageListenerContainer redisContainer() {
        RedisMessageListenerContainer container
                = new RedisMessageListenerContainer();
        container.setConnectionFactory(redisConnectionFactory);
        container.addMessageListener(messageListener(), topic());
        container.addMessageListener(redisMessageSubscriber2, topic());
        return container;
    }

    @Bean
    MessagePublisher redisPublisher() {
        return new RedisMessagePublisher(redisTemplate(), topic());
    }

    @Bean
    ChannelTopic topic() {
        return new ChannelTopic("northQueue");
    }

}

以上代碼中有幾個點:

  1. 創建適配器時,這里面我們使用了MessageListener的實現類,簡單容易理解。
  2. 使用消息容器來訂閱消息隊列,其中addMessageListener中可以訂閱多個隊列,其中第二個參數可以傳入隊列名數組。而且可以添加多個訂閱方。

RedisMessageListenerContainer 是處理消費者和發布者的關系的類 ,使用起來也比較簡單。

測試

下面我們做一個小測試:

寫一個接口來出發消息發布,使用多個訂閱者

@RestController
public class TestController {
    @Resource
    private MessagePublisher redisMessagePublisher;

    @GetMapping("/hello")
    public Flux<String> hello(@RequestParam String message) {
        redisMessagePublisher.publish(message);
        return Flux.*just*("Hello", "Webflux");
    }
}

啟動SpringBoot項目后我們發送消息測試:

圖片圖片

兩個消費者都接到了消息:

圖片圖片


責任編輯:武曉燕 來源: Java技術指北
相關推薦

2025-02-25 09:29:34

2019-07-16 09:20:11

Redis數據庫NoSQL

2024-10-11 11:50:05

Redis適用場景

2024-07-02 11:42:53

SpringRedis自定義

2020-09-15 10:25:13

Redis命令Java

2022-06-27 13:56:10

設計模式緩存分布式系統

2010-03-02 16:28:11

WCF發布訂閱

2022-12-02 07:28:58

Event訂閱模式Spring

2025-01-23 08:53:15

2020-01-02 09:57:09

Redis訂閱發布

2022-08-15 09:02:22

Redis模式訂閱消息

2025-03-11 09:30:00

2023-12-14 10:10:09

pythonRedis開發

2022-09-19 16:08:31

Dapr發布訂閱

2009-11-05 10:07:37

WCF設計模式

2010-04-15 03:48:52

2010-07-05 12:09:16

SQL Server

2023-01-11 08:22:22

RabbitMQ通信模型

2024-05-14 08:03:51

C#EventArgs?屬性

2023-11-10 09:22:06

點贊
收藏

51CTO技術棧公眾號

久久久天堂国产精品女人| 亚洲一区二区三区在线看| 日韩美女激情视频| 男生草女生视频| 97精品国产99久久久久久免费| 国产精品人妖ts系列视频| 91精品啪aⅴ在线观看国产| 99精品久久久久| 欧美网色网址| 欧美美女一区二区三区| 丁香六月激情婷婷| a天堂在线资源| 高清久久久久久| 国产精品pans私拍| 欧美黑人一级片| 国产亚洲一区| 精品久久久久久久人人人人传媒 | 日韩精品一区二区久久| 日韩视频在线你懂得| 粗暴91大变态调教| 人妖欧美1区| 国产免费成人在线视频| 国产伦精品一区二区三区照片| 成人毛片一区二区三区| 一区视频在线| 久久国产精品久久久久久久久久| 波多野结衣福利| 日韩精品成人在线观看| 欧美在线免费视屏| 免费无码不卡视频在线观看| sm国产在线调教视频| 国产农村妇女毛片精品久久麻豆 | 国产精品91视频| 青娱乐国产在线视频| 欧美伦理影院| 亚洲毛片在线看| bl动漫在线观看| 日韩第一区第二区| 91麻豆精品久久久久蜜臀| 黄色av免费在线播放| 高潮在线视频| 亚洲第一福利一区| 成人在线视频一区二区三区| 午夜视频在线看| 久久精品免视看| 久久综合中文色婷婷| 欧美在线 | 亚洲| 国产高清不卡二三区| 成人免费视频网址| ,一级淫片a看免费| 日本免费新一区视频| 欧美在线xxx| 久久久久久久黄色片| 亚洲视频久久| 久久久久久久影院| 久久精品免费在线| 亚洲无码精品一区二区三区| 91精品国产66| 色诱亚洲精品久久久久久| 国产69精品久久久久久久| 国模私拍视频在线播放| 一区二区欧美国产| 免费网站在线观看视频| 男女免费观看在线爽爽爽视频| 国产伦理一区| 欧美高清视频在线播放| 免费又黄又爽又色的视频| 欧美人与禽猛交乱配视频| 久久精品免费播放| 欧美黑人性猛交xxx| 女人天堂亚洲aⅴ在线观看| 九九精品在线播放| 日韩精品视频播放| 视频一区二区国产| 国产欧美日韩中文字幕在线| 国产美女精品视频国产| 丁香天五香天堂综合| 国产丝袜不卡| 黄色国产在线| 亚洲欧美一区二区视频| 黄色一级片国产| 中文字幕在线看片| 欧美视频一二三区| 4438x全国最大成人| 美女主播精品视频一二三四| 亚洲色无码播放| 性少妇xx生活| 欧美视频成人| 国产99久久精品一区二区| 亚洲天堂999| 成人综合在线观看| 日本不卡免费新一二三区| 毛片在线看网站| 亚洲国产一区二区三区青草影视| 成人久久久久久久久| 偷拍自拍亚洲| 亚洲第一二三四五区| 无码少妇一区二区| 欧美日韩第一区| 国产精品第1页| 性生活免费网站| 久久精品欧美日韩精品| 美女黄色免费看| 国产精品久久久久久妇女| 日韩欧美国产系列| 少妇av片在线观看| 亚洲国产一区二区精品专区| 国产精品丝袜视频| av女名字大全列表| 亚洲精品中文在线观看| 国产精品99久久免费黑人人妻| 国产美女视频一区二区| 亚洲日韩中文字幕在线播放| 欧美xxxx黑人xyx性爽| 老司机亚洲精品| 超碰97在线资源| 欧美激情午夜| 日本道色综合久久| 少妇一级淫片免费放播放| 婷婷久久国产对白刺激五月99| 欧美一级视频在线观看| 亚洲av无码片一区二区三区| 日本一区二区综合亚洲| 男人靠女人免费视频网站| 日韩欧美中文在线观看| 精品国模在线视频| 国产三级理论片| 2020国产精品自拍| 人人妻人人澡人人爽欧美一区双| 亚洲视频资源| 色妞色视频一区二区三区四区| 毛片在线免费视频| 不卡在线视频中文字幕| 国产成a人亚洲精v品在线观看| 香蕉久久一区| 色琪琪综合男人的天堂aⅴ视频| 久久精品视频1| 99精品国产热久久91蜜凸| 日韩极品视频在线观看 | 亚洲另类自拍| 亚洲aa在线观看| 国产原厂视频在线观看| 欧美日韩国产欧美日美国产精品| 国产精品天天干| 老妇喷水一区二区三区| 欧美日韩大片一区二区三区| 日韩在线伦理| 亚洲美女自拍视频| 天天综合网入口| 91久色porny| 中文字幕无码精品亚洲35| 久久久久久毛片免费看 | 婷婷激情成人| 久久综合久中文字幕青草| 国产精品久久久久久久久毛片| 中文字幕av一区二区三区免费看| 冲田杏梨av在线| 日韩a一区二区| 成人妇女免费播放久久久| 免费黄色在线观看| 日韩视频一区在线观看| 免费麻豆国产一区二区三区四区| 国产成人午夜精品5599| 精品丰满人妻无套内射| 少妇一区二区三区| 欧美一级高清免费| 亚洲欧美视频一区二区| 制服丝袜日韩国产| 久久久精品视频在线| av午夜一区麻豆| 国产精彩免费视频| 日韩欧美高清| 亚洲一区二区中文| 538在线观看| 亚洲最新视频在线| 一本色道久久综合亚洲| 一区二区欧美精品| 国产三级av在线播放| 青椒成人免费视频| 成人毛片100部免费看| 林ゆな中文字幕一区二区| 国产91在线播放| 国产cdts系列另类在线观看| 亚洲国产精品久久精品怡红院| 日本中文字幕在线观看视频| 综合久久国产九一剧情麻豆| 精品久久久久一区二区| 日韩黄色免费电影| 91免费版看片| 九九热精品视频在线观看| 91精品视频网站| 国产调教在线| 日韩视频一区在线| 香港三日本三级少妇66| 欧美乱熟臀69xxxxxx| 亚洲精品国产精品乱码| 国产精品情趣视频| 少妇一级淫片免费放播放| 另类专区欧美蜜桃臀第一页| 青青青青草视频| 四虎成人精品永久免费av九九| 国产伦精品一区二区三区高清| 草民电影神马电影一区二区| 久久久久久久91| 麻豆视频网站在线观看| 亚洲欧美国产日韩中文字幕| 国产手机精品视频| 欧美性猛交xxxx乱大交退制版 | 国产男女猛烈无遮挡a片漫画| 美女国产一区二区三区| 欧美a v在线播放| 欧美女激情福利| 亚洲午夜久久久影院伊人| 日韩超碰人人爽人人做人人添| 91久久久国产精品| 午夜欧美巨大性欧美巨大| 久久久久免费精品国产| 老司机av在线免费看| 亚洲毛片一区二区| 天天干,夜夜爽| 日韩西西人体444www| 正在播放亚洲精品| 一本色道久久综合精品竹菊| 欧美精品色哟哟| 亚洲视频在线观看一区| 最新中文字幕av| 久久女同性恋中文字幕| 国产精品一区二区人妻喷水| 国产福利精品一区二区| 中国黄色片一级| 免费在线视频一区| 男人天堂成人在线| 国产精品一卡| 少妇人妻在线视频| 亚洲欧洲综合| 人人妻人人澡人人爽欧美一区| 亚洲成av人电影| 国产高清免费在线| 久久久久久久久久久9不雅视频 | 在线免费av电影| 尤物yw午夜国产精品视频明星| 你懂的在线观看| 亚洲美女av网站| 免费一级毛片在线观看| 亚洲男人天堂网| 六十路在线观看| 亚洲欧美制服中文字幕| 欧美高清电影在线| 亚洲人成免费电影| 成人在线播放视频| 在线观看欧美日韩国产| 福利小视频在线观看| 在线观看欧美www| 麻豆传媒在线免费| 欧美xxxx18国产| 视频在线观看入口黄最新永久免费国产 | 一区在线观看| www国产精品内射老熟女| 国产精品入口| 成人3d动漫一区二区三区| 日韩电影在线观看网站| 黄色手机在线视频| 国产在线精品国自产拍免费| www激情五月| 成人网在线播放| 亚洲欧美在线不卡| 国产亚洲精品久| 激情五月激情综合| 亚洲综合在线五月| 69成人免费视频| 欧美特级限制片免费在线观看| 国产又黄又大又爽| 精品国产91亚洲一区二区三区婷婷 | 亚洲蜜桃在线| 欧美成人嫩草网站| 国产91在线免费| 免费成人美女在线观看| www.久久com| 94色蜜桃网一区二区三区| 久久国产柳州莫菁门| 亚洲色图视频免费播放| 日韩精品――中文字幕| 91久久精品一区二区三| 国产精品亚洲lv粉色| 亚洲第一网站男人都懂| 国产私人尤物无码不卡| 欧美成人午夜激情| 久久电影tv| 亚洲va电影大全| 婷婷综合电影| 欧美日韩一级在线| 国产欧美日本| 九九热视频免费| 久久久综合精品| 91日韩中文字幕| 日本韩国欧美一区二区三区| 精品久久国产视频| 亚洲人成啪啪网站| 爱看av在线| 国产狼人综合免费视频| 另类在线视频| 伊人久久在线观看| 日韩高清不卡一区| 亚洲 欧美 日韩在线| 国产精品第五页| 久久黄色精品视频| 日韩精品专区在线| 午夜视频在线看| 国产精品第七影院| 久久国产精品免费精品3p| 二级片在线观看| 日韩av中文字幕一区二区| 中文字幕精品久久久| 一区二区三区中文字幕电影| 波多野结衣人妻| 国产视频一区在线| 岛国毛片av在线| 亚洲jizzjizz日本少妇| 大色综合视频网站在线播放| 无码aⅴ精品一区二区三区浪潮| 国产精品99久久久久久有的能看| 怡红院一区二区三区| 欧美日韩国产精品一区| 亚洲国产成人精品一区二区三区| 色噜噜久久综合伊人一本| 精品国产欧美日韩一区二区三区| 国内一区二区三区在线视频| 91高清一区| 在线观看免费不卡av| 国产亚洲综合色| 伦av综合一区| 国产视频丨精品|在线观看| 国产精品原创| 国产欧美一区二区三区另类精品| 午夜欧美精品| 在线观看网站黄| 亚洲欧美一区二区三区极速播放| 中文字幕欧美在线观看| 国产亚洲欧美日韩一区二区| 欧美成人黑人| 日本一区免费看| 久久精品午夜| av手机在线播放| 91成人国产精品| 大乳在线免费观看| 国产精品青草久久久久福利99| 韩日一区二区三区| 成人性视频欧美一区二区三区| 久久久久国产精品麻豆ai换脸 | 日本伊人色综合网| 中文字幕av久久爽一区| 欧美专区亚洲专区| av资源种子在线观看| 成人av在线亚洲| 一区二区三区在线电影| 欧美一级片在线免费观看| 亚洲福利一区二区三区| 亚洲三区在线播放| 国产成人黄色av| 99国产精品一区二区| 亚洲av毛片在线观看| 亚洲成人在线免费| 色鬼7777久久| 国产精品久久久久久久一区探花| 日韩av久操| 成人三级做爰av| 欧美日韩国产精品专区| 国产视频二区在线观看| 国产精自产拍久久久久久蜜| 欧美99在线视频观看| 亚洲久久久久久| 欧美性色欧美a在线播放| av免费网站在线观看| 国产伦精品一区二区三区四区免费 | 一区两区小视频| 欧美精品在线第一页| 国产精品17p| 欧美自拍小视频| 亚洲品质自拍视频| 五月婷婷在线播放| 国产精品欧美一区二区三区奶水 | 91免费精品国自产拍在线不卡| 国产伦精品一区二区三区视频网站| 综合激情国产一区| 一区二区三区在线免费看| 免费观看精品视频| 综合自拍亚洲综合图不卡区| 三级视频在线看| 国产精品视频最多的网站| 亚洲一级一区| 久久精品色妇熟妇丰满人妻| 精品国产99国产精品| 国产黄色精品| 日韩av在线第一页| 亚洲欧洲成人精品av97| 日av在线播放| 高清国产在线一区| 日本大胆欧美人术艺术动态| 国产无码精品在线观看| 中文字幕在线成人|