🐙

Next.jsでredisサーバーでWorker/Queueを実現しつつマルチ構成(本版用・検証用)にしたい

2024/08/29に公開

1. 元の状況

  • 構成
    • MAC OS
    • Next.js
    • redisサーバー(6379ポート)

redisのMACへのインストールは以下の記事を参考にした。
https://weblabo.oscasierra.net/redis-macos-install-homebrew/

Next.jsでの設定は以下の通り設定。

  • package.json
  "scripts": {
    "redis": "dotenv -e .env.local -- npx tsx utils/redis.ts"
  },
  • utils/redis.ts
import { Worker, Queue } from "bullmq";
import Redis from "ioredis";
import * as os from "os";

export const videoUploadQueue = new Queue("videoUploadQueue", {
  connection: {
    host: "127.0.0.1",
    port: Number(process.env.REDIS_PORT) || 6379,
  },
  defaultJobOptions: {
    attempts: 2,
    backoff: {
      type: "exponential",
      delay: 5000,
    },
  },
});

const videoUploadWorker = new Worker(
  "videoUploadQueue",
  async (job) => {
    const platform = os.platform();
    if (platform == "darwin") {
      darwinUpload(job);
    }
  },
  {
    connection: new Redis({
      host: "127.0.0.1",
      port: Number(process.env.REDIS_PORT) || 6379,
      maxRetriesPerRequest: null,
    }),
    concurrency: 5,
    removeOnComplete: { count: 1000 },
    removeOnFail: { count: 5000 },
  }
);

export { videoUploadWorker };
  • .env.local
REDIS_PORT=6379

2. redis複数構成

AWSのサーバーを使わず、MACをサーバー代わりに使っているため、本番用のredis処理が動いている時に検証用環境への処理が実行できなくなった。
なので、複数redisサーバーを立ち上げ、本番用/検証用で分けることを検討した。

  1. redisサーバーをもう1台立てる
    1. /opt/homebrew/etc/redis.confを複製
    cp -a /opt/homebrew/etc/redis.conf /opt/homebrew/etc/redis_6380.conf
    
    1. ポートを修正する
    sudo vi /opt/homebrew/etc/redis_6380.conf
    ------
    # port 6379
    port 6380
    
    1. redisサーバー(6380ポート)起動
    redis-server /opt/homebrew/etc/redis_6380.conf
    
    ちなみに以下で停止
    redis-cli -p 6380 shutdown
    
  2. Next.jsでredis複数構成起動
    1. 本番用
      1. .env.local
      REDIS_PORT=6379
      
      1. ビルド
      yarn build
      
      1. redisワーカー起動
      yarn redis
      
      1. スタート
      yarn start
      
    2. 検証用
      1. .env.local
      REDIS_PORT=6380
      
      1. ビルド ※redisサーバー(6380ポート)起動を事前にしておく
      yarn build
      
      1. redisワーカー起動
      yarn redis
      
      1. スタート
      PORT=3001 yarn start
      

Discussion