nestjs-power-queues 1.0.26 → 1.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -31,8 +31,12 @@ yarn add nestjs-power-queues
31
31
  ```env
32
32
  REDIS_QUEUES_HOST=127.0.0.1
33
33
  REDIS_QUEUES_PORT=6379
34
+ REDIS_QUEUES_DATABASE=1
34
35
  REDIS_QUEUES_PASSWORD=
35
- REDIS_QUEUES_DATABASE=0
36
+ REDIS_QUEUES_KEY_EXPIRE=300
37
+ REDIS_QUEUES_TLS_CA_CRT=
38
+ REDIS_QUEUES_TLS_KEY=
39
+ REDIS_QUEUES_TLS_CRT=
36
40
  ```
37
41
 
38
42
  For information on creating connections to Redis, see **[nestjs-power-redis](https://www.npmjs.com/package/nestjs-power-redis)**
@@ -66,36 +70,85 @@ export class MyService {
66
70
  ) {}
67
71
 
68
72
  async test() {
69
- await this.queueService.addTasks('example:jobs', [
70
- { payload },
71
- ]);
73
+ await this.queueService.addTasks('example:job', [ ...payload ]);
72
74
  }
73
75
  }
74
76
  ```
75
77
 
76
- ### 4. Create worker
78
+ ### 4. Example of a worker for executing a MySQL insert transaction
77
79
 
78
80
  ```ts
79
81
  import { Injectable } from '@nestjs/common';
80
- import {
81
- InjectRedis,
82
- RedisService,
82
+ import {
83
+ InjectRedis,
84
+ RedisService,
83
85
  } from 'nestjs-power-redis';
84
- import { QueueService } from 'nestjs-power-queues';
86
+ import {
87
+ QueueService,
88
+ Task,
89
+ } from 'nestjs-power-queues';
90
+ import {
91
+ isArrFilled,
92
+ isObjFilled,
93
+ } from 'full-utils';
94
+ import { MysqlService } from 'mysql';
95
+ import { Logger } from '../logger';
85
96
 
86
97
  @Injectable()
87
- export class MyService extends QueueService {
88
- public readonly stream: string = `example:jobs`;
89
- public readonly workerBatchTasksCount: number = 8192;
98
+ export class ExampleQueue extends QueueService {
99
+ public readonly logger: Logger = new Logger(ExampleQueue.name);
100
+ public readonly selectStuckCount: number = 256;
101
+ public readonly selectCount: number = 256;
102
+ public readonly retryCount: number = 3;
90
103
  public readonly runOnInit: boolean = true;
91
- public readonly executeBatchAtOnce: boolean = true;
104
+ public readonly executeSync: boolean = true;
105
+ public readonly removeOnExecuted: boolean = true;
92
106
 
93
107
  constructor(
94
108
  @InjectRedis('queues') public readonly redisService: RedisService,
95
- ) {}
109
+ public readonly mysqlService: MysqlService,
110
+ ) {
111
+ super(redisService);
112
+ }
113
+
114
+ queueName(): string {
115
+ return 'mysql_create:example:table_name';
116
+ }
117
+
118
+ async onBatchReady(queueName: string, tasks: Task[]) {
119
+ const values = tasks
120
+ .filter((task) => isObjFilled(task.payload))
121
+ .map((task) => task.payload);
122
+
123
+ if (isArrFilled(values)) {
124
+ const queryRunner = this.mysqlService.connection('database_name').createQueryRunner();
125
+
126
+ await queryRunner.connect();
127
+ await queryRunner.startTransaction();
128
+ try {
129
+ await queryRunner
130
+ .manager
131
+ .createQueryBuilder()
132
+ .insert()
133
+ .into('table_name')
134
+ .values(values)
135
+ .execute();
136
+ await queryRunner.commitTransaction();
137
+ }
138
+ catch (err) {
139
+ await queryRunner.rollbackTransaction();
140
+ throw err;
141
+ }
142
+ finally {
143
+ await queryRunner.release();
144
+ }
145
+ }
146
+ }
96
147
 
97
- async onExecute(id, payload) {
98
- // business-logic
148
+ async onBatchError(err: any, queueName: string, tasks: Array<[ string, any, number, string, string, number ]>) {
149
+ this.logger.error('Transaction error', queueName, tasks.length, (process.env.NODE_ENV === 'production')
150
+ ? err.message
151
+ : err, tasks.map((task) => task[1]));
99
152
  }
100
153
  }
101
154
  ```
package/dist/index.cjs CHANGED
@@ -25,23 +25,18 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
25
25
  var index_exports = {};
26
26
  __export(index_exports, {
27
27
  InjectQueue: () => InjectQueue,
28
- QueueModule: () => QueueModule,
29
28
  QueueService: () => QueueService,
30
- getQueueToken: () => getQueueToken,
31
- queueRoot: () => import_nestjs_power_redis2.redisRoot
29
+ getQueueToken: () => getQueueToken
32
30
  });
33
31
  module.exports = __toCommonJS(index_exports);
34
- var import_nestjs_power_redis2 = require("nestjs-power-redis");
32
+ __reExport(index_exports, require("nestjs-power-redis"), module.exports);
33
+ __reExport(index_exports, require("power-queues"), module.exports);
35
34
 
36
35
  // src/InjectQueue.ts
37
36
  var import_common = require("@nestjs/common");
38
37
  var getQueueToken = /* @__PURE__ */ __name((name) => `QueueService_${name}`, "getQueueToken");
39
38
  var InjectQueue = /* @__PURE__ */ __name((name) => (0, import_common.Inject)(getQueueToken(name)), "InjectQueue");
40
39
 
41
- // src/QueueModule.ts
42
- var import_common2 = require("@nestjs/common");
43
- var import_nestjs_power_redis = require("nestjs-power-redis");
44
-
45
40
  // src/QueueService.ts
46
41
  var import_power_queues = require("power-queues");
47
42
  var _QueueService = class _QueueService extends import_power_queues.PowerQueues {
@@ -70,55 +65,11 @@ var _QueueService = class _QueueService extends import_power_queues.PowerQueues
70
65
  };
71
66
  __name(_QueueService, "QueueService");
72
67
  var QueueService = _QueueService;
73
-
74
- // src/QueueModule.ts
75
- function _ts_decorate(decorators, target, key, desc) {
76
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
77
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
78
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
79
- return c > 3 && r && Object.defineProperty(target, key, r), r;
80
- }
81
- __name(_ts_decorate, "_ts_decorate");
82
- var _QueueModule = class _QueueModule {
83
- static forRoot(names) {
84
- const queueProviders = names.map((name) => ({
85
- provide: getQueueToken(name),
86
- useFactory: /* @__PURE__ */ __name((redisService) => {
87
- return new QueueService(redisService);
88
- }, "useFactory"),
89
- inject: [
90
- (0, import_nestjs_power_redis.getRedisToken)(name)
91
- ]
92
- }));
93
- return {
94
- module: _QueueModule,
95
- imports: [
96
- import_nestjs_power_redis.RedisModule.forRoot(names)
97
- ],
98
- providers: [
99
- ...queueProviders
100
- ],
101
- exports: [
102
- ...queueProviders,
103
- import_nestjs_power_redis.RedisModule
104
- ]
105
- };
106
- }
107
- };
108
- __name(_QueueModule, "QueueModule");
109
- var QueueModule = _QueueModule;
110
- QueueModule = _ts_decorate([
111
- (0, import_common2.Module)({})
112
- ], QueueModule);
113
-
114
- // src/index.ts
115
- __reExport(index_exports, require("power-queues"), module.exports);
116
68
  // Annotate the CommonJS export names for ESM import in node:
117
69
  0 && (module.exports = {
118
70
  InjectQueue,
119
- QueueModule,
120
71
  QueueService,
121
72
  getQueueToken,
122
- queueRoot,
73
+ ...require("nestjs-power-redis"),
123
74
  ...require("power-queues")
124
75
  });
package/dist/index.d.cts CHANGED
@@ -1,17 +1,13 @@
1
1
  import { RedisService } from 'nestjs-power-redis';
2
- export { redisRoot as queueRoot } from 'nestjs-power-redis';
3
- import { DynamicModule, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
4
- import { IORedisLike } from 'power-redis';
2
+ export * from 'nestjs-power-redis';
5
3
  import { PowerQueues } from 'power-queues';
6
4
  export * from 'power-queues';
5
+ import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
6
+ import { IORedisLike } from 'power-redis';
7
7
 
8
8
  declare const getQueueToken: (name: string) => string;
9
9
  declare const InjectQueue: (name: string) => PropertyDecorator & ParameterDecorator;
10
10
 
11
- declare class QueueModule {
12
- static forRoot(names: string[]): DynamicModule;
13
- }
14
-
15
11
  declare class QueueService extends PowerQueues implements OnModuleInit, OnModuleDestroy {
16
12
  readonly redisService: RedisService;
17
13
  readonly runOnInit: boolean;
@@ -22,4 +18,4 @@ declare class QueueService extends PowerQueues implements OnModuleInit, OnModule
22
18
  onModuleDestroy(): Promise<void>;
23
19
  }
24
20
 
25
- export { InjectQueue, QueueModule, QueueService, getQueueToken };
21
+ export { InjectQueue, QueueService, getQueueToken };
package/dist/index.d.ts CHANGED
@@ -1,17 +1,13 @@
1
1
  import { RedisService } from 'nestjs-power-redis';
2
- export { redisRoot as queueRoot } from 'nestjs-power-redis';
3
- import { DynamicModule, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
4
- import { IORedisLike } from 'power-redis';
2
+ export * from 'nestjs-power-redis';
5
3
  import { PowerQueues } from 'power-queues';
6
4
  export * from 'power-queues';
5
+ import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
6
+ import { IORedisLike } from 'power-redis';
7
7
 
8
8
  declare const getQueueToken: (name: string) => string;
9
9
  declare const InjectQueue: (name: string) => PropertyDecorator & ParameterDecorator;
10
10
 
11
- declare class QueueModule {
12
- static forRoot(names: string[]): DynamicModule;
13
- }
14
-
15
11
  declare class QueueService extends PowerQueues implements OnModuleInit, OnModuleDestroy {
16
12
  readonly redisService: RedisService;
17
13
  readonly runOnInit: boolean;
@@ -22,4 +18,4 @@ declare class QueueService extends PowerQueues implements OnModuleInit, OnModule
22
18
  onModuleDestroy(): Promise<void>;
23
19
  }
24
20
 
25
- export { InjectQueue, QueueModule, QueueService, getQueueToken };
21
+ export { InjectQueue, QueueService, getQueueToken };
package/dist/index.js CHANGED
@@ -4,17 +4,14 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
5
 
6
6
  // src/index.ts
7
- import { redisRoot as queueRoot } from "nestjs-power-redis";
7
+ export * from "nestjs-power-redis";
8
+ export * from "power-queues";
8
9
 
9
10
  // src/InjectQueue.ts
10
11
  import { Inject } from "@nestjs/common";
11
12
  var getQueueToken = /* @__PURE__ */ __name((name) => `QueueService_${name}`, "getQueueToken");
12
13
  var InjectQueue = /* @__PURE__ */ __name((name) => Inject(getQueueToken(name)), "InjectQueue");
13
14
 
14
- // src/QueueModule.ts
15
- import { Module } from "@nestjs/common";
16
- import { RedisModule, getRedisToken } from "nestjs-power-redis";
17
-
18
15
  // src/QueueService.ts
19
16
  import { PowerQueues } from "power-queues";
20
17
  var _QueueService = class _QueueService extends PowerQueues {
@@ -43,53 +40,8 @@ var _QueueService = class _QueueService extends PowerQueues {
43
40
  };
44
41
  __name(_QueueService, "QueueService");
45
42
  var QueueService = _QueueService;
46
-
47
- // src/QueueModule.ts
48
- function _ts_decorate(decorators, target, key, desc) {
49
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
50
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
51
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
52
- return c > 3 && r && Object.defineProperty(target, key, r), r;
53
- }
54
- __name(_ts_decorate, "_ts_decorate");
55
- var _QueueModule = class _QueueModule {
56
- static forRoot(names) {
57
- const queueProviders = names.map((name) => ({
58
- provide: getQueueToken(name),
59
- useFactory: /* @__PURE__ */ __name((redisService) => {
60
- return new QueueService(redisService);
61
- }, "useFactory"),
62
- inject: [
63
- getRedisToken(name)
64
- ]
65
- }));
66
- return {
67
- module: _QueueModule,
68
- imports: [
69
- RedisModule.forRoot(names)
70
- ],
71
- providers: [
72
- ...queueProviders
73
- ],
74
- exports: [
75
- ...queueProviders,
76
- RedisModule
77
- ]
78
- };
79
- }
80
- };
81
- __name(_QueueModule, "QueueModule");
82
- var QueueModule = _QueueModule;
83
- QueueModule = _ts_decorate([
84
- Module({})
85
- ], QueueModule);
86
-
87
- // src/index.ts
88
- export * from "power-queues";
89
43
  export {
90
44
  InjectQueue,
91
- QueueModule,
92
45
  QueueService,
93
- getQueueToken,
94
- queueRoot
46
+ getQueueToken
95
47
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nestjs-power-queues",
3
- "version": "1.0.26",
3
+ "version": "1.0.28",
4
4
  "description": "High-performance Redis Streams queue integration for NestJS based on power-queues.",
5
5
  "author": "ihor-bielchenko",
6
6
  "license": "MIT",
@@ -87,8 +87,7 @@
87
87
  "dependencies": {
88
88
  "@nestjs-labs/nestjs-ioredis": "^11.0.4",
89
89
  "@nestjs/common": "^11.1.8",
90
- "full-utils": "^3.0.9",
91
90
  "nestjs-power-redis": "^1.0.16",
92
- "power-queues": "^2.1.7"
91
+ "power-queues": "^2.1.12"
93
92
  }
94
93
  }