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

redis延時(shí)隊(duì)列的項(xiàng)目實(shí)踐

 更新時(shí)間:2024年11月22日 08:28:53   作者:從int開(kāi)始  
本文主要介紹了redis延時(shí)隊(duì)列的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

引入

<redisson.version>3.15.5</redisson.version>
    <dependency>
      <groupId>org.redisson</groupId>
      <artifactId>redisson-spring-boot-starter</artifactId>
      <version>${redisson.version}</version>
    </dependency>

放入延時(shí)隊(duì)列

  import org.redisson.api.RedissonClient;
  
  @Autowired
  private RedissonClient redissonClient;
  public static final String CardKitMessageDelayQueue = "QUEUE:CARD_KIT";

      // 發(fā)送延時(shí)消息
      RBlockingDeque<CardKitRedisBo> blockingDeque = redissonClient
              .getBlockingDeque(CardKitMessageDelayQueue);
      RDelayedQueue<CardKitRedisBo> delayedQueue = redissonClient.getDelayedQueue(blockingDeque);
      // 計(jì)算時(shí)間戳
      long delayInSeconds = calculateDifference(model.getSendTime(), LocalDateTime.now());
      CardKitRedisBo cardKitRedisBo = new CardKitRedisBo();
      cardKitRedisBo.setId(model.getId()).setTemplateId(model.getTemplateId());
      delayedQueue.offer(cardKitRedisBo, delayInSeconds, TimeUnit.SECONDS);

監(jiān)聽(tīng)延時(shí)隊(duì)列

import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RBlockingDeque;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.cloud.sleuth.Span;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

@Slf4j
@Component
public class CardKitMessageListener implements ApplicationRunner {

  public static final String CardKitMessageDelayQueue = "QUEUE:CARD_KIT";

  public static final String CardKitMessageDelayLock = "LOCK:CARD_KIT";

  @Resource
  private RedissonClient redissonClient;

  @Autowired
  private Tracer tracer;

  @Autowired
  private CardKitService cardKitService;

  @Override
  public void run(ApplicationArguments args) {
    new Thread(() -> {
      RBlockingDeque<CardKitRedisBo> blockingDeque = redissonClient.getBlockingDeque(CardKitMessageDelayQueue);
      while (true) {
        // 獲取定時(shí)任務(wù)鎖
        RLock rLock = redissonClient.getLock(CardKitMessageDelayLock);
        try {
          // 最多等待5秒
          boolean isLocked = rLock.tryLock(5, TimeUnit.SECONDS);
          if (isLocked) {
            Span span = tracer.nextSpan().name("OccupationMessage").start();
            try (Tracer.SpanInScope ws = tracer.withSpan(span)) {
              CardKitRedisBo poll = blockingDeque.take();
              log.info("獲取延時(shí)消息:{}", JSONUtil.toJsonStr(poll));
              // 消費(fèi)消息
              cardKitService.sendCardKit(poll);
            } finally {
              try {
                rLock.unlock();
              } catch (Exception ex) {
                log.warn("鎖釋放失敗:" + ex.getMessage());
              }
              try {
                span.end();
              } catch (Exception ex) {
				log.error("失敗", ex)
              }
            }
          }
        } catch (Exception ex) {
          log.error("延遲消息處理異常:" + ex.getMessage(), ex);
        }
      }
    }).start();
  }
}

到此這篇關(guān)于redis延時(shí)隊(duì)列的文章就介紹到這了,更多相關(guān)redis延時(shí)隊(duì)列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Redis 設(shè)置密碼無(wú)效問(wèn)題解決

    Redis 設(shè)置密碼無(wú)效問(wèn)題解決

    本文主要介紹了Redis 設(shè)置密碼無(wú)效問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Redis緩存異常之緩存雪崩問(wèn)題解讀

    Redis緩存異常之緩存雪崩問(wèn)題解讀

    文章主要介紹了緩存雪崩、擊穿和穿透問(wèn)題,以及針對(duì)這些問(wèn)題的解決方法,包括服務(wù)熔斷、服務(wù)降級(jí)、請(qǐng)求限流和布隆過(guò)濾器等
    2025-01-01
  • Redis本地鎖和分布式鎖的區(qū)別小結(jié)

    Redis本地鎖和分布式鎖的區(qū)別小結(jié)

    Redis本地鎖和分布式鎖在設(shè)計(jì)目的、實(shí)現(xiàn)方式和應(yīng)用場(chǎng)景上都有顯著區(qū)別,下面就來(lái)介紹一下,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • Redis操作命令總結(jié)

    Redis操作命令總結(jié)

    這篇文章主要介紹了Redis操作命令總結(jié),本文講解了key pattern 查詢(xún)相應(yīng)的key、字符串類(lèi)型的操作、鏈表操作、hashes類(lèi)型及操作、集合結(jié)構(gòu)操作、有序集合、服務(wù)器相關(guān)命令等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Redis+PHP實(shí)現(xiàn)用戶(hù)消息推送每天最多通知2次的功能

    Redis+PHP實(shí)現(xiàn)用戶(hù)消息推送每天最多通知2次的功能

    在開(kāi)發(fā)應(yīng)用程序中,經(jīng)常需要向用戶(hù)推送消息通知,但是為了避免過(guò)多的打擾用戶(hù),我們希望限制每天最多通知2次,本篇博文將介紹如何使用PHP和Redis實(shí)現(xiàn)這一功能,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-10-10
  • Redis的主從同步解析

    Redis的主從同步解析

    這篇文章主要介紹了Redis的主從同步解析,見(jiàn)識(shí)淺薄,僅供參考。
    2017-10-10
  • 詳解Redis中地理位置功能Geospatial的應(yīng)用

    詳解Redis中地理位置功能Geospatial的應(yīng)用

    Geospatial?Indexes?是?Redis?提供的一種數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)和查詢(xún)地理位置信息,這篇文章就來(lái)和大家詳細(xì)講講Geospatial的具體應(yīng)用吧
    2023-06-06
  • Redis實(shí)現(xiàn)開(kāi)機(jī)自啟腳本(linux)

    Redis實(shí)現(xiàn)開(kāi)機(jī)自啟腳本(linux)

    本段文字主要介紹了在Linux系統(tǒng)中通過(guò)創(chuàng)建啟動(dòng)腳本和修改配置文件來(lái)實(shí)現(xiàn)Redis服務(wù)的開(kāi)機(jī)自啟動(dòng),并強(qiáng)調(diào)了使用chkconfig命令的重要性,通過(guò)本文,讀者可以掌握Redis服務(wù)在Linux系統(tǒng)中的安裝與配置方法
    2026-06-06
  • Redis數(shù)據(jù)遷移的多種方法詳解

    Redis數(shù)據(jù)遷移的多種方法詳解

    在現(xiàn)代的分布式系統(tǒng)中,Redis作為一種高性能的鍵值存儲(chǔ)數(shù)據(jù)庫(kù),被廣泛應(yīng)用于緩存、消息隊(duì)列、會(huì)話存儲(chǔ)等場(chǎng)景,隨著業(yè)務(wù)的發(fā)展,Redis實(shí)例的數(shù)據(jù)遷移需求也變得越來(lái)越常見(jiàn),本文將詳細(xì)介紹Redis數(shù)據(jù)遷移的多種方法,并通過(guò)命令行工具幫助你輕松完成遷移任務(wù)
    2025-01-01
  • Redis集群節(jié)點(diǎn)通信過(guò)程/原理流程分析

    Redis集群節(jié)點(diǎn)通信過(guò)程/原理流程分析

    這篇文章主要介紹了Redis集群節(jié)點(diǎn)通信過(guò)程/原理,詳細(xì)介紹了Cluster(集群)的節(jié)點(diǎn)通信的流程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

深州市| 徐汇区| 宁强县| 错那县| 聊城市| 怀安县| 阿图什市| 随州市| 兰州市| 高陵县| 崇礼县| 龙山县| 湖州市| 都昌县| 荔浦县| 无为县| 山阴县| 宣威市| 邯郸市| 自贡市| 株洲县| 斗六市| 东海县| 锡林郭勒盟| 台山市| 萍乡市| 三亚市| 伊宁县| 辉南县| 北京市| 运城市| 安远县| 崇义县| 土默特左旗| 阳新县| 鄂伦春自治旗| 得荣县| 太仓市| 鄂尔多斯市| 泊头市| 万荣县|