재학습/DB

Redis로 간단지연 큐 구현이 될까? (2) - Redis의 지연 큐 구현

재이든 2022. 9. 27. 00:03
반응형

 

지난 글에서,

RabbitMQ에서는

플러그인으로 구현하거나, 

별도의 큐를 생성하여 구현하는것을 알아보았다.

 

https://japing.tistory.com/entry/Redis로-간단지연-큐-구현이-될까-1-간단지연-큐란

 

Redis로 간단지연 큐 구현이 될까? (1) - 간단지연 큐란?

목표 회사에서 큐를 구현한다. Redis를 사용한다. 회사 시스템측 이슈로인해 Redis Queue에 Push시 1분 대기시간이 필요하다. 이를 위한 시스템을 구상하는 과정에서 '간단지연 큐'를 발견하게되었다.

japing.tistory.com

 

Redis에서는

1.지연큐를 지원하는 기능 or 플러그인이 있는지

2.별도의 방법

 

지연큐를 지원하는 기능이 있는지

1.Redis + Java8(+Spring) 을 위한 Redis Delay Queue 라이브러리인 redis-dqueue 

https://github.com/hellokaton/redis-dqueue

 

GitHub - hellokaton/redis-dqueue: redis base delay queue

redis base delay queue. Contribute to hellokaton/redis-dqueue development by creating an account on GitHub.

github.com

@GetMapping("/push")
public String push(String id) throws RDQException {
    Message<String> message = new Message<>();
    message.setTopic("order-cancel");
    message.setPayload(id);
    message.setDelayTime(10);
    rdQueueTemplate.asyncPush(message, (s, throwable) -> {
      // TODO async push result
    });
    return "推送成功";
}

 

 

2.Nest를 위한 @nest/bull

https://docs.nestjs.com/techniques/queues

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac

docs.nestjs.com

Nest는 인기 있고 잘 지원되는 고성능 Node.js 기반 Queue 시스템 구현 인 Bull@nestjs/bull 위에 추상화/래퍼로 패키지를 제공합니다. 이 패키지를 사용하면 Bull Queues를 Nest 친화적인 방식으로 애플리케이션에 쉽게 통합할 수 있습니다.

Bull은 작업 데이터를 유지하기 위해 Redis 를 사용 하므로 시스템에 Redis가 설치되어 있어야 합니다. Redis 기반이기 때문에 Queue 아키텍처는 완전히 분산되고 플랫폼에 독립적일 수 있습니다.

  • delay: number- 이 작업을 처리할 수 있을 때까지 기다리는 시간(밀리초)입니다. 정확한 지연을 위해 서버와 클라이언트 모두 시계를 동기화해야 합니다.

3.Laravel

https://laravel.kr/docs/5.8/queues

 

라라벨 5.8 - Queues-큐

라라벨 한글 메뉴얼 5.8 - Queues-큐

laravel.kr

라라벨의 Queue-큐는 Beanstalk, Amazone SQS, Redis 그리고 관계형 데이터베이스과 같은 다양한 큐 시스템을 위한 통일된 API를 제공합니다. 큐를 사용하면 이메일을 보내는 일과 같이 시간이 소요되는 Job을 나중에 처리할 수 있습니다. 이렇게 소모되는 작업들을 나중에 처리함으로써 여러분의 애플리케이션은 웹 요청-request을 더 빠르게 처리할 수 있습니다.

 

지연시켜서 처리하기

대기열에 있는 job의 실행을 지연하려면, job 이 dispathcing 될 때 delay 메소드를 사용할 수 있습니다. 예를 들어, job이 10 분이 지난 뒤에 처리되도록 지정해보겠습니다:

<?php

namespace App\Http\Controllers;

use App\Jobs\ProcessPodcast;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PodcastController extends Controller
{
    /**
     * Store a new podcast.
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        // Create podcast...

        ProcessPodcast::dispatch($podcast)
                ->delay(now()->addMinutes(10));
    }
}
반응형

별도의 방법(구상 중)

1.RDB를 사용

1-1.Message -> 2.Producer(1분대기) -> 3.Redis Push -> 4.Consumer(바로 Pop)

1-2.Producer(1분대기)  디테일

Message -> RDB(TimeStamp로 기록) -> RDB를 TimeStamp정렬조회 후 1분 지난것들 선별 -> Redis에 Push

 

2.??

 

 

반응형

'재학습 > DB' 카테고리의 다른 글

Redis로 간단지연 큐 구현이 될까? (1) - 간단지연 큐란?  (0) 2022.09.26
[Postgresql] Vacuum 이란?  (0) 2021.10.20