SoFunction
Updated on 2025-03-04

Project Practice of Redis Delay Queue

Introduced

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

Put in the delay queue

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

      // Send delay message      RBlockingDeque&lt;CardKitRedisBo&gt; blockingDeque = redissonClient
              .getBlockingDeque(CardKitMessageDelayQueue);
      RDelayedQueue&lt;CardKitRedisBo&gt; delayedQueue = (blockingDeque);
      // Calculate the timestamp      long delayInSeconds = calculateDifference((), ());
      CardKitRedisBo cardKitRedisBo = new CardKitRedisBo();
      (()).setTemplateId(());
      (cardKitRedisBo, delayInSeconds, );

Listen to delay queues

import ;
import .slf4j.Slf4j;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;

import ;
import ;

@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(() -&gt; {
      RBlockingDeque&lt;CardKitRedisBo&gt; blockingDeque = (CardKitMessageDelayQueue);
      while (true) {
        // Obtain the timed task lock        RLock rLock = (CardKitMessageDelayLock);
        try {
          // Wait up to 5 seconds          boolean isLocked = (5, );
          if (isLocked) {
            Span span = ().name("OccupationMessage").start();
            try ( ws = (span)) {
              CardKitRedisBo poll = ();
              ("Get delay message:{}", (poll));
              // Consumption news              (poll);
            } finally {
              try {
                ();
              } catch (Exception ex) {
                ("Lock release failed:" + ());
              }
              try {
                ();
              } catch (Exception ex) {
				("fail", ex)
              }
            }
          }
        } catch (Exception ex) {
          ("Delayed message handling exception:" + (), ex);
        }
      }
    }).start();
  }
}

This is all about this article about redis delay queue. For more related redis delay queue content, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!