🐙
Next.jsでredisサーバーでWorker/Queueを実現しつつマルチ構成(本版用・検証用)にしたい
1. 元の状況
- 構成
- MAC OS
- Next.js
- redisサーバー(6379ポート)
redisのMACへのインストールは以下の記事を参考にした。
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サーバーを立ち上げ、本番用/検証用で分けることを検討した。
- redisサーバーをもう1台立てる
- /opt/homebrew/etc/redis.confを複製
cp -a /opt/homebrew/etc/redis.conf /opt/homebrew/etc/redis_6380.conf
- ポートを修正する
sudo vi /opt/homebrew/etc/redis_6380.conf ------ # port 6379 port 6380
- redisサーバー(6380ポート)起動
ちなみに以下で停止redis-server /opt/homebrew/etc/redis_6380.conf
redis-cli -p 6380 shutdown
- Next.jsでredis複数構成起動
- 本番用
- .env.local
REDIS_PORT=6379
- ビルド
yarn build
- redisワーカー起動
yarn redis
- スタート
yarn start
- 検証用
- .env.local
REDIS_PORT=6380
- ビルド ※redisサーバー(6380ポート)起動を事前にしておく
yarn build
- redisワーカー起動
yarn redis
- スタート
PORT=3001 yarn start
- 本番用
Discussion