ts-node 没有按照预期运行 ESM 模块,或者拒绝在 ts 文件中执行 `import` 语句,或者无法运行 `.ts` 文件
import Redis from 'ioredis'; import { fork } from 'child_process'; import dotenv from 'dotenv';
import { Worker } from './worker'; import { isValid } from './../shared/lib/utils';
dotenv.config(); const streamNames: string[] = ["stream-1", "stream-2"]; const numWorkersPerStream: number = 5; const REDIS_HOST = process.env.REDIS_HOST; const REDIS_PORT = isValid(process.env.REDIS_PORT) ? parseInt(process.env.REDIS_PORT!, 10) : null;
if (!isValid(REDIS_HOST)) { console.error('REDIS_HOST is not a valid environmental variable'); process.exit(1); }
if (!isValid(REDIS_PORT)) { console.error('REDIS_PORT is not a valid environmental variable'); process.exit(1); }
const redisClient = new Redis({ host: REDIS_HOST!, port: REDIS_PORT!, });
async function createConsumerGroupIfNotExists(streamName: string, consumerGroup: string) {
try {
await redisClient.xgroup('CREATE', streamName, consumerGroup, '$', 'MKSTREAM');
console.log(Consumer group "${consumerGroup}" created (if not already exists) for stream "${streamName}");
} catch (error: any) {
if (!error.message.includes('BUSYGROUP Consumer Group name already exists')) {
console.error('Error creating consumer group:', error);
}
}
}
// Create consumer groups only once
for (let i = 0; i < streamNames.length; i++) {
const streamName = streamNames[i];
const consumerGroup = ${streamName}-group;
createConsumerGroupIfNotExists(streamName, consumerGroup);
}
// Create worker processes for each stream and group combination
for (let i = 0; i < streamNames.length; i++) {
for (let j = 0; j < numWorkersPerStream; j++) {
const workerName: string = worker-${streamNames[i]}-${j};
const streamName: string = streamNames[i];
const consumerGroup: string = ${streamName}-group;
const args: string[] = [workerName, streamName, consumerGroup, REDIS_HOST!, REDIS_PORT!.toString()];
const workerProcess =
…
内容来源: TypeStrong/ts-node