open-index/open-npm huggingface dataset:
npm package: @inest/nestjs-nacos
Description: 基于Nestjs集成Nacos，实现配置中心、服务发现等功能
Author: iCNNN
Latest version: 2.0.2

# `@inest/nestjs-nacos`

> nestjs-nacos 是基于 NestJS 的 Nacos 客户端模块。它可以帮助你在 NestJS 应用中轻松使用 Nacos 进行服务发现和配置管理。

## 安装

```bash
npm i @inest/nestjs-nacos

yarn add @inest/nestjs-nacos

pnpm i @inest/nestjs-nacos
```

## 使用

### 配置中心
```ts
@Module({
  imports: [
    // 导入nacos模块
    NacosConfigModule.forRoot({
      serverAddr: SERVER_ADDR,
      namespace: NAMESPACE,
      isPrintLog: true, // 是否打印日志
    }),
    // 异步导入nacos模块
    /*NacosConfigModule.forRootAsync({
      isGlobal: true,
      inject: [XXXService],
      useFactory: (service: XXXService) => {
        // 读取本地配置：.yml、.evn、.properties等 
        const config = service.getConfig();
        return {
          serverAddr: config.serverAddr,
          namespace: config.namespace,
          isPrintLog: true, // 是否打印日志
        };
      },
    }),*/
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements OnModuleInit {
  // 注入configClient，用于对配置的操作
  @ConfigClient()
  client: NacosConfigClient;

  // 注入要监听的dataId
  @Config('test')
  private config: any;

  // 默认情况下：{ group：'DEFAULT_GROUP', parser: 转成json }
  @Config('test1', {
    group: 'TEST', parser: (config) => {
      // 转换config
      try {
        return JSON.parse(config);
      } catch (e) {
        return config;
      }
    },
  })
  private config1: any;

  async onModuleInit() {
    // 加载config配置是异步的，在模块初始化时，可能还没有设置值
    setTimeout(() => {
      console.info(this.config);

      console.info(this.config1);
    }, 1000);
  }
}
```
> NacosConfigClient用法参考[官方API](https://nacos.io/zh-cn/docs/open-api.html)

##
npm package: @inest/nestjs-schedule
Description: 基于Nestjs + bullMQ + redis实现的分布式任务调度模块
Author: iCNNN
Latest version: 0.0.9

# `@inest/nestjs-schedule`

> 基于Nestjs + bullMQ + redis实现的分布式任务调度模块

## 说明

> 默认配置项：防止任务调度中产生大量的日志数据，影响redis性能。
> 可根据实际情况在初始化`SchedulerModule`模块时自行配置

```ts
const DEFAULT_JOB_OPTIONS = {
  removeOnComplete: {
    age: 3600, // 1小时
    count: 10, // 保存近10条
  },
  removeOnFail: {
    age: 7 * 24 * 3600, // 7天
    count: 100, // 保存近100条
  },
  stackTraceLimit: 500,
};
```
## 安装
```bash
npm i @inest/nestjs-schedule

uarn add @inest/nestjs-schedule

pnpm i @inest/nestjs-schedule
```

## 使用方法

### 1. 导入模块

#### 1.1. 静态导入模块

```ts
SchedulerModule.forRoot({
  connection: {
    host: 'xxx.xxx.xxx.xxx',
    port: 6379,
    password: 'xxxxxx',
    db: 0,
  },
  prefix: 'applicationName', // 任务名前缀 
} as JobOptionsWrapper);
```

#### 1.2. 异步导入模块

> 需要通过读取配置文件的方式获取redis配置时，使用此方式

```ts
SchedulerModule.forRootAsync({
  inject: [ConfigService],
  useFactory: (cs: ConfigService) => {
    // 调用cs服务，获取配置文件中的配置
    return {
      connection: {
        host: 'xxx.xxx.xxx.xxx',
        port: 6379,
        password: 'xxxxxx',
        db: 0,
      },
      prefix: 'applicationName', // 任务名前缀 
    } as JobOptionsWrapper;
  },
})
```

## 2. 分布式任务调度器的使用

### 2.1 cron表达式

```ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class TaskService {
  // 每5秒中调用一次
  @Schedule('*/5 * * * * ?')
  task() {
    console.log('helle world');
  }
}
```

### 2.2 间隔调用

```ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class TaskService {
  // 每5秒中调用一次
  @Schedule(5000) // 5000 ms
  task() {
    console.log('helle world');
  }
}
```

### 2.3 特定条件下调用

```ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class TaskService {
  // 每5秒中调用一次
  @Schedule('*/5 * * * * ?', () => {
    // 伪代码 应对各类特定环境才执行的场景
    // return getIp() === '118.88.88.88';
    // return getOS() === 'Linux';
    // return getApplication() === 'taskApp';
    // ...
    return true;
  })
  task() {
    console.log('helle world');
  }
}
```

> 更多参数配置，请参考bull文档

## 3. 本地(单机)任务调度器的使用

```ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class TaskService {
  @LocalSchedule({
    cronTime: '* * * * * *',
    /**
     * 特定条件下调用，同上面的场景
     */
    validator() {
      // 伪代码 应对各类特定环境才执行的场景
      // return getIp() === '118.88.88.88';
      // return getOS() === 'Linux';
      // return getApplication() === 'taskApp';
      // ...
      return true;
    },
  })
  localTask() {
    console.log('helle world');
  }
}
```

> 更多参数请参考`@nestjs/schedule`文档