@nestjstools/messaging-nats-extension 1.0.0 → 1.1.0
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 +81 -13
- package/lib/channel/nats-channel-factory.js.map +1 -1
- package/lib/channel/nats-channel.config.js +2 -1
- package/lib/channel/nats-channel.config.js.map +1 -1
- package/lib/channel/nats-jet-stream-channel-factory.d.ts +6 -0
- package/lib/channel/nats-jet-stream-channel-factory.js +24 -0
- package/lib/channel/nats-jet-stream-channel-factory.js.map +1 -0
- package/lib/channel/nats-jet-stream-channel.config.d.ts +24 -0
- package/lib/channel/nats-jet-stream-channel.config.js +34 -0
- package/lib/channel/nats-jet-stream-channel.config.js.map +1 -0
- package/lib/channel/nats-jet-stream.channel.d.ts +10 -0
- package/lib/channel/nats-jet-stream.channel.js +28 -0
- package/lib/channel/nats-jet-stream.channel.js.map +1 -0
- package/lib/channel/nats.channel.d.ts +1 -0
- package/lib/channel/nats.channel.js +6 -0
- package/lib/channel/nats.channel.js.map +1 -1
- package/lib/consumer/nats-jet-stream-messaging-consumer.d.ts +7 -0
- package/lib/consumer/nats-jet-stream-messaging-consumer.js +85 -0
- package/lib/consumer/nats-jet-stream-messaging-consumer.js.map +1 -0
- package/lib/consumer/nats-messaging-consumer.js +1 -1
- package/lib/consumer/nats-messaging-consumer.js.map +1 -1
- package/lib/index.d.ts +5 -0
- package/lib/index.js +22 -0
- package/lib/index.js.map +1 -0
- package/lib/message-bus/nats-jet-stream-message-bus-factory.d.ts +6 -0
- package/lib/message-bus/nats-jet-stream-message-bus-factory.js +24 -0
- package/lib/message-bus/nats-jet-stream-message-bus-factory.js.map +1 -0
- package/lib/message-bus/nats-jet-stream-message-bus.d.ts +8 -0
- package/lib/message-bus/nats-jet-stream-message-bus.js +40 -0
- package/lib/message-bus/nats-jet-stream-message-bus.js.map +1 -0
- package/lib/message-bus/nats-message-bus-factory.d.ts +2 -2
- package/lib/message-bus/nats-message-bus-factory.js.map +1 -1
- package/lib/message-bus/nats-message-bus.js +2 -1
- package/lib/message-bus/nats-message-bus.js.map +1 -1
- package/lib/messaging-nats-extension.module.js +6 -0
- package/lib/messaging-nats-extension.module.js.map +1 -1
- package/lib/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
|
|
7
7
|
A NestJS library for managing asynchronous and synchronous messages with support for buses, handlers, channels, and consumers. This library simplifies building scalable and decoupled applications by facilitating robust message handling pipelines while ensuring flexibility and reliability.
|
|
8
8
|
|
|
9
|
-
---
|
|
10
9
|
## Documentation
|
|
11
10
|
|
|
12
11
|
https://nestjstools.gitbook.io/nestjstools-messaging-docs
|
|
@@ -24,10 +23,12 @@ or
|
|
|
24
23
|
```bash
|
|
25
24
|
yarn add @nestjstools/messaging @nestjstools/messaging-nats-extension
|
|
26
25
|
```
|
|
27
|
-
##
|
|
26
|
+
## Nats Integration: Messaging Configuration Example
|
|
28
27
|
|
|
29
28
|
---
|
|
30
29
|
|
|
30
|
+
### Simple Config for nats messaging
|
|
31
|
+
|
|
31
32
|
```typescript
|
|
32
33
|
import { Module } from '@nestjs/common';
|
|
33
34
|
import { MessagingModule } from '@nestjstools/messaging';
|
|
@@ -40,14 +41,58 @@ import { MessagingNatsExtensionModule, NatsChannelConfig } from "@nestjstools/me
|
|
|
40
41
|
MessagingModule.forRoot({
|
|
41
42
|
buses: [
|
|
42
43
|
{
|
|
43
|
-
name: 'nats-
|
|
44
|
-
channels: ['nats-
|
|
44
|
+
name: 'nats-message.bus',
|
|
45
|
+
channels: ['nats-message'],
|
|
45
46
|
},
|
|
46
47
|
],
|
|
47
48
|
channels: [
|
|
48
49
|
new NatsChannelConfig({
|
|
49
|
-
name: 'nats-
|
|
50
|
+
name: 'nats-message',
|
|
50
51
|
enableConsumer: true, // Enable if you want to consume messages
|
|
52
|
+
connectionUris: ['nats://localhost:4222'],
|
|
53
|
+
subscriberName: 'nats-core',
|
|
54
|
+
}),
|
|
55
|
+
],
|
|
56
|
+
debug: true, // Optional: Enable debugging for Messaging operations
|
|
57
|
+
}),
|
|
58
|
+
],
|
|
59
|
+
})
|
|
60
|
+
export class AppModule {}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Config for Nats with JetStream
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import { Module } from '@nestjs/common';
|
|
67
|
+
import { MessagingModule } from '@nestjstools/messaging';
|
|
68
|
+
import { SendMessageHandler } from './handlers/send-message.handler';
|
|
69
|
+
import { MessagingNatsExtensionModule, NatsJetStreamChannelConfig } from "@nestjstools/messaging-nats-extension";
|
|
70
|
+
|
|
71
|
+
@Module({
|
|
72
|
+
imports: [
|
|
73
|
+
MessagingNatsExtensionModule, // Importing the Nats extension module
|
|
74
|
+
MessagingModule.forRoot({
|
|
75
|
+
buses: [
|
|
76
|
+
{
|
|
77
|
+
name: 'nats-message.bus',
|
|
78
|
+
channels: ['nats-channel-jetstream'],
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
channels: [
|
|
82
|
+
new NatsJetStreamChannelConfig({
|
|
83
|
+
name: 'nats-channel-jetstream', // Unique channel name in your app
|
|
84
|
+
connectionUris: ['nats://localhost:4222'], // URI of your NATS server
|
|
85
|
+
enableConsumer: true, // Enables message consumer
|
|
86
|
+
streamConfig: {
|
|
87
|
+
streamName: 'event-steam', // Name of the JetStream stream
|
|
88
|
+
deliverSubjects: ['my_app_command.*'], // Subjects for stream
|
|
89
|
+
autoUpdate: true, // Allow stream config update at app startup
|
|
90
|
+
},
|
|
91
|
+
consumerConfig: {
|
|
92
|
+
durableName: 'nats-durable_name', // Persistent consumer name (track offset)
|
|
93
|
+
subject: 'my_app_command.*', // Specific subject this consumer listens to
|
|
94
|
+
autoUpdate: true, // Allow consumer config update
|
|
95
|
+
},
|
|
51
96
|
}),
|
|
52
97
|
],
|
|
53
98
|
debug: true, // Optional: Enable debugging for Messaging operations
|
|
@@ -67,7 +112,7 @@ import { IMessageBus, MessageBus, RoutingMessage } from '@nestjstools/messaging'
|
|
|
67
112
|
@Controller()
|
|
68
113
|
export class AppController {
|
|
69
114
|
constructor(
|
|
70
|
-
@MessageBus('nats-
|
|
115
|
+
@MessageBus('nats-message.bus') private natsMessageBus: IMessageBus,
|
|
71
116
|
) {}
|
|
72
117
|
|
|
73
118
|
@Get('/nats')
|
|
@@ -112,12 +157,35 @@ export class CreateUserHandler implements IMessageHandler<CreateUser>{
|
|
|
112
157
|
Once the message is published with the correct routing key, it will be automatically routed to the appropriate handler within the NestJS application.
|
|
113
158
|
---
|
|
114
159
|
|
|
115
|
-
##
|
|
160
|
+
## Routing Strategy
|
|
116
161
|
|
|
117
|
-
|
|
162
|
+
Message routing behavior depends on the value of `subscriberName`:
|
|
163
|
+
|
|
164
|
+
* **Static Routing:**
|
|
165
|
+
If `subscriberName` is a specific subject (e.g., `'order.created'`), all messages will be published directly to that subject.
|
|
166
|
+
|
|
167
|
+
* **Wildcard Routing:**
|
|
168
|
+
If `subscriberName` contains a wildcard (e.g., `'order.*'` or `'order.>'`), the system uses `message.messageRoutingKey` as the publish subject instead. This enables dynamic routing based on the actual message type or topic.
|
|
169
|
+
|
|
170
|
+
### Example
|
|
171
|
+
|
|
172
|
+
```ts
|
|
173
|
+
// If subscriberName is 'order.*'
|
|
174
|
+
subscriberName = 'order.*';
|
|
175
|
+
message.messageRoutingKey = 'order.created';
|
|
176
|
+
|
|
177
|
+
// The message will be published to 'order.created'
|
|
178
|
+
```
|
|
179
|
+
or JetStream
|
|
180
|
+
```ts
|
|
181
|
+
// If JetStream deliverSubjects is ['order.*']
|
|
182
|
+
subject = 'order.*'; // from consumer
|
|
183
|
+
message.messageRoutingKey = 'order.created';
|
|
184
|
+
|
|
185
|
+
// The message will be published to 'order.created'
|
|
186
|
+
```
|
|
118
187
|
|
|
119
|
-
|
|
120
|
-
Here's a revised and expanded version of your README section. I corrected grammar, clarified the description, and added the missing properties.
|
|
188
|
+
This strategy allows you to use a single subscriber to handle a range of message types dynamically.
|
|
121
189
|
|
|
122
190
|
---
|
|
123
191
|
|
|
@@ -126,13 +194,13 @@ Here's a revised and expanded version of your README section. I corrected gramma
|
|
|
126
194
|
### NatsChannel
|
|
127
195
|
|
|
128
196
|
| **Property** | **Description** | **Default Value** |
|
|
129
|
-
| --------------------
|
|
130
|
-
| **`name`** | The name of the NATS channel (e.g., `'nats-
|
|
197
|
+
| -------------------- |---------------------------------------------------------------------------------| ----------------- |
|
|
198
|
+
| **`name`** | The name of the NATS channel (e.g., `'nats-message'`). | |
|
|
131
199
|
| **`enableConsumer`** | Whether to enable message consumption (i.e., process incoming messages). | `true` |
|
|
132
200
|
| **`connectionUris`** | An array of NATS server URIs to connect to (e.g., `['nats://localhost:4222']`). | |
|
|
133
201
|
| **`subscriberName`** | A unique identifier for the subscriber (used in queue group subscriptions). | |
|
|
134
202
|
|
|
135
203
|
---
|
|
136
204
|
|
|
137
|
-
|
|
205
|
+
### Real world working example with RabbitMQ & Redis - but might be helpful to understand how it works
|
|
138
206
|
https://github.com/nestjstools/messaging-rabbitmq-example
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nats-channel-factory.js","sourceRoot":"","sources":["../../src/channel/nats-channel-factory.ts"],"names":[],"mappings":";;;;;;;;;AAAA,iDAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"nats-channel-factory.js","sourceRoot":"","sources":["../../src/channel/nats-channel-factory.ts"],"names":[],"mappings":";;;;;;;;;AAAA,iDAA6C;AAC7C,2CAA4C;AAC5C,sDAAyE;AACzE,+DAA0D;AAInD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,MAAM,CAAC,aAAgC;QACrC,OAAO,IAAI,0BAAW,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;CACF,CAAA;AAJY,gDAAkB;6BAAlB,kBAAkB;IAF9B,IAAA,mBAAU,GAAE;IACZ,IAAA,0BAAc,EAAC,uCAAiB,CAAC;GACrB,kBAAkB,CAI9B"}
|
|
@@ -7,7 +7,8 @@ class NatsChannelConfig extends messaging_1.ChannelConfig {
|
|
|
7
7
|
subscriberName;
|
|
8
8
|
constructor({ connectionUris, subscriberName, name, enableConsumer, avoidErrorsForNotExistedHandlers, middlewares, normalizer, }) {
|
|
9
9
|
super(name, avoidErrorsForNotExistedHandlers, middlewares, enableConsumer, normalizer);
|
|
10
|
-
this.connectionUris =
|
|
10
|
+
this.connectionUris =
|
|
11
|
+
typeof connectionUris === 'string' ? [connectionUris] : connectionUris;
|
|
11
12
|
this.subscriberName = subscriberName;
|
|
12
13
|
}
|
|
13
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nats-channel.config.js","sourceRoot":"","sources":["../../src/channel/nats-channel.config.ts"],"names":[],"mappings":";;;AAAA,sDAAuD;AAEvD,MAAa,iBAAkB,SAAQ,yBAAa;IAClC,cAAc,CAAW;IACzB,cAAc,CAAS;IAEvC,YAAY,
|
|
1
|
+
{"version":3,"file":"nats-channel.config.js","sourceRoot":"","sources":["../../src/channel/nats-channel.config.ts"],"names":[],"mappings":";;;AAAA,sDAAuD;AAEvD,MAAa,iBAAkB,SAAQ,yBAAa;IAClC,cAAc,CAAW;IACzB,cAAc,CAAS;IAEvC,YAAY,EACV,cAAc,EACd,cAAc,EACd,IAAI,EACJ,cAAc,EACd,gCAAgC,EAChC,WAAW,EACX,UAAU,GACQ;QAClB,KAAK,CACH,IAAI,EACJ,gCAAgC,EAChC,WAAW,EACX,cAAc,EACd,UAAU,CACX,CAAC;QACF,IAAI,CAAC,cAAc;YACjB,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;QACzE,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;CACF;AAxBD,8CAwBC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IChannelFactory } from '@nestjstools/messaging';
|
|
2
|
+
import { NatsJetStreamChannelConfig } from './nats-jet-stream-channel.config';
|
|
3
|
+
import { NatsJetStreamChannel } from './nats-jet-stream.channel';
|
|
4
|
+
export declare class NatsJetStreamChannelFactory implements IChannelFactory<NatsJetStreamChannelConfig> {
|
|
5
|
+
create(channelConfig: NatsJetStreamChannelConfig): NatsJetStreamChannel;
|
|
6
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.NatsJetStreamChannelFactory = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const messaging_1 = require("@nestjstools/messaging");
|
|
12
|
+
const nats_jet_stream_channel_config_1 = require("./nats-jet-stream-channel.config");
|
|
13
|
+
const nats_jet_stream_channel_1 = require("./nats-jet-stream.channel");
|
|
14
|
+
let NatsJetStreamChannelFactory = class NatsJetStreamChannelFactory {
|
|
15
|
+
create(channelConfig) {
|
|
16
|
+
return new nats_jet_stream_channel_1.NatsJetStreamChannel(channelConfig);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
exports.NatsJetStreamChannelFactory = NatsJetStreamChannelFactory;
|
|
20
|
+
exports.NatsJetStreamChannelFactory = NatsJetStreamChannelFactory = __decorate([
|
|
21
|
+
(0, common_1.Injectable)(),
|
|
22
|
+
(0, messaging_1.ChannelFactory)(nats_jet_stream_channel_config_1.NatsJetStreamChannelConfig)
|
|
23
|
+
], NatsJetStreamChannelFactory);
|
|
24
|
+
//# sourceMappingURL=nats-jet-stream-channel-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats-jet-stream-channel-factory.js","sourceRoot":"","sources":["../../src/channel/nats-jet-stream-channel-factory.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,sDAAyE;AACzE,qFAA8E;AAC9E,uEAAiE;AAI1D,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAGtC,MAAM,CAAC,aAAyC;QAC9C,OAAO,IAAI,8CAAoB,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;CACF,CAAA;AANY,kEAA2B;sCAA3B,2BAA2B;IAFvC,IAAA,mBAAU,GAAE;IACZ,IAAA,0BAAc,EAAC,2DAA0B,CAAC;GAC9B,2BAA2B,CAMvC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ChannelConfig } from '@nestjstools/messaging';
|
|
2
|
+
export declare class NatsJetStreamChannelConfig extends ChannelConfig {
|
|
3
|
+
readonly connectionUris: string[] | string;
|
|
4
|
+
readonly streamConfig: StreamConfig;
|
|
5
|
+
readonly consumerConfig: ConsumerConfig;
|
|
6
|
+
constructor({ connectionUris, name, enableConsumer, avoidErrorsForNotExistedHandlers, middlewares, normalizer, streamConfig, consumerConfig, }: NatsJetStreamChannelConfig);
|
|
7
|
+
}
|
|
8
|
+
export declare enum StorageType {
|
|
9
|
+
File = "file",
|
|
10
|
+
Memory = "memory"
|
|
11
|
+
}
|
|
12
|
+
export interface StreamConfig {
|
|
13
|
+
autoUpdate?: boolean;
|
|
14
|
+
streamName: string;
|
|
15
|
+
deliverSubjects: string[];
|
|
16
|
+
maxMsgs?: number;
|
|
17
|
+
maxBytes?: number;
|
|
18
|
+
storageType?: StorageType;
|
|
19
|
+
}
|
|
20
|
+
export interface ConsumerConfig {
|
|
21
|
+
autoUpdate?: boolean;
|
|
22
|
+
durableName?: string;
|
|
23
|
+
subject: string;
|
|
24
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StorageType = exports.NatsJetStreamChannelConfig = void 0;
|
|
4
|
+
const messaging_1 = require("@nestjstools/messaging");
|
|
5
|
+
class NatsJetStreamChannelConfig extends messaging_1.ChannelConfig {
|
|
6
|
+
connectionUris;
|
|
7
|
+
streamConfig;
|
|
8
|
+
consumerConfig;
|
|
9
|
+
constructor({ connectionUris, name, enableConsumer, avoidErrorsForNotExistedHandlers, middlewares, normalizer, streamConfig, consumerConfig, }) {
|
|
10
|
+
super(name, avoidErrorsForNotExistedHandlers, middlewares, enableConsumer, normalizer);
|
|
11
|
+
this.connectionUris =
|
|
12
|
+
typeof connectionUris === 'string' ? [connectionUris] : connectionUris;
|
|
13
|
+
this.streamConfig = {
|
|
14
|
+
autoUpdate: streamConfig.autoUpdate ?? false,
|
|
15
|
+
maxBytes: streamConfig.maxBytes ?? 1000,
|
|
16
|
+
maxMsgs: streamConfig.maxMsgs ?? 10_000_000,
|
|
17
|
+
streamName: streamConfig.streamName,
|
|
18
|
+
deliverSubjects: streamConfig.deliverSubjects,
|
|
19
|
+
storageType: streamConfig.storageType ?? StorageType.Memory,
|
|
20
|
+
};
|
|
21
|
+
this.consumerConfig = {
|
|
22
|
+
autoUpdate: streamConfig.autoUpdate ?? false,
|
|
23
|
+
durableName: consumerConfig.durableName,
|
|
24
|
+
subject: consumerConfig.subject,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.NatsJetStreamChannelConfig = NatsJetStreamChannelConfig;
|
|
29
|
+
var StorageType;
|
|
30
|
+
(function (StorageType) {
|
|
31
|
+
StorageType["File"] = "file";
|
|
32
|
+
StorageType["Memory"] = "memory";
|
|
33
|
+
})(StorageType || (exports.StorageType = StorageType = {}));
|
|
34
|
+
//# sourceMappingURL=nats-jet-stream-channel.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats-jet-stream-channel.config.js","sourceRoot":"","sources":["../../src/channel/nats-jet-stream-channel.config.ts"],"names":[],"mappings":";;;AAAA,sDAAuD;AAEvD,MAAa,0BAA2B,SAAQ,yBAAa;IAC3C,cAAc,CAAoB;IAClC,YAAY,CAAe;IAC3B,cAAc,CAAiB;IAE/C,YAAY,EACV,cAAc,EACd,IAAI,EACJ,cAAc,EACd,gCAAgC,EAChC,WAAW,EACX,UAAU,EACV,YAAY,EACZ,cAAc,GACa;QAC3B,KAAK,CACH,IAAI,EACJ,gCAAgC,EAChC,WAAW,EACX,cAAc,EACd,UAAU,CACX,CAAC;QACF,IAAI,CAAC,cAAc;YACjB,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;QACzE,IAAI,CAAC,YAAY,GAAG;YAClB,UAAU,EAAE,YAAY,CAAC,UAAU,IAAI,KAAK;YAC5C,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAI,IAAI;YACvC,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,UAAU;YAC3C,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,eAAe,EAAE,YAAY,CAAC,eAAe;YAC7C,WAAW,EAAE,YAAY,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM;SAC5D,CAAC;QACF,IAAI,CAAC,cAAc,GAAG;YACpB,UAAU,EAAE,YAAY,CAAC,UAAU,IAAI,KAAK;YAC5C,WAAW,EAAE,cAAc,CAAC,WAAW;YACvC,OAAO,EAAE,cAAc,CAAC,OAAO;SAChC,CAAC;IACJ,CAAC;CACF;AAtCD,gEAsCC;AAED,IAAY,WASX;AATD,WAAY,WAAW;IAIrB,4BAAa,CAAA;IAIb,gCAAiB,CAAA;AACnB,CAAC,EATW,WAAW,2BAAX,WAAW,QAStB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Channel } from '@nestjstools/messaging';
|
|
2
|
+
import { JetStreamClient, JetStreamManager, NatsConnection } from 'nats';
|
|
3
|
+
import { NatsJetStreamChannelConfig } from './nats-jet-stream-channel.config';
|
|
4
|
+
export declare class NatsJetStreamChannel extends Channel<NatsJetStreamChannelConfig> {
|
|
5
|
+
readonly client: Promise<NatsConnection>;
|
|
6
|
+
constructor(config: NatsJetStreamChannelConfig);
|
|
7
|
+
jetStreamClient(): Promise<JetStreamClient>;
|
|
8
|
+
jetStreamManager(): Promise<JetStreamManager>;
|
|
9
|
+
onChannelDestroy(): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NatsJetStreamChannel = void 0;
|
|
4
|
+
const messaging_1 = require("@nestjstools/messaging");
|
|
5
|
+
const nats_1 = require("nats");
|
|
6
|
+
class NatsJetStreamChannel extends messaging_1.Channel {
|
|
7
|
+
client;
|
|
8
|
+
constructor(config) {
|
|
9
|
+
super(config);
|
|
10
|
+
this.client = (0, nats_1.connect)({ servers: config.connectionUris });
|
|
11
|
+
}
|
|
12
|
+
async jetStreamClient() {
|
|
13
|
+
const client = await this.client;
|
|
14
|
+
return client.jetstream();
|
|
15
|
+
}
|
|
16
|
+
async jetStreamManager() {
|
|
17
|
+
const client = await this.client;
|
|
18
|
+
return client.jetstreamManager();
|
|
19
|
+
}
|
|
20
|
+
async onChannelDestroy() {
|
|
21
|
+
const client = await this.client;
|
|
22
|
+
await client.drain();
|
|
23
|
+
await client.close();
|
|
24
|
+
return super.onChannelDestroy();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.NatsJetStreamChannel = NatsJetStreamChannel;
|
|
28
|
+
//# sourceMappingURL=nats-jet-stream.channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats-jet-stream.channel.js","sourceRoot":"","sources":["../../src/channel/nats-jet-stream.channel.ts"],"names":[],"mappings":";;;AAAA,sDAAiD;AACjD,+BAKc;AAGd,MAAa,oBAAqB,SAAQ,mBAAmC;IAC3D,MAAM,CAA0B;IAEhD,YAAY,MAAkC;QAC5C,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,IAAA,cAAO,EAAC,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;QACjC,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;QACjC,OAAO,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;QACjC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAClC,CAAC;CACF;AAxBD,oDAwBC"}
|
|
@@ -9,6 +9,12 @@ class NatsChannel extends messaging_1.Channel {
|
|
|
9
9
|
super(config);
|
|
10
10
|
this.client = (0, nats_1.connect)({ servers: config.connectionUris });
|
|
11
11
|
}
|
|
12
|
+
async onChannelDestroy() {
|
|
13
|
+
const client = await this.client;
|
|
14
|
+
await client.drain();
|
|
15
|
+
await client.close();
|
|
16
|
+
return super.onChannelDestroy();
|
|
17
|
+
}
|
|
12
18
|
}
|
|
13
19
|
exports.NatsChannel = NatsChannel;
|
|
14
20
|
//# sourceMappingURL=nats.channel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nats.channel.js","sourceRoot":"","sources":["../../src/channel/nats.channel.ts"],"names":[],"mappings":";;;AAAA,sDAAiD;AAEjD,+BAA+C;AAE/C,MAAa,WAAY,SAAQ,mBAA0B;IACzC,MAAM,CAA0B;IAEhD,YAAY,MAAyB;QACnC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,IAAA,cAAO,EAAC,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"nats.channel.js","sourceRoot":"","sources":["../../src/channel/nats.channel.ts"],"names":[],"mappings":";;;AAAA,sDAAiD;AAEjD,+BAA+C;AAE/C,MAAa,WAAY,SAAQ,mBAA0B;IACzC,MAAM,CAA0B;IAEhD,YAAY,MAAyB;QACnC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,IAAA,cAAO,EAAC,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;QACjC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAClC,CAAC;CACF;AAdD,kCAcC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ConsumerDispatchedMessageError, ConsumerMessageDispatcher, IMessagingConsumer } from '@nestjstools/messaging';
|
|
2
|
+
import { NatsJetStreamChannel } from '../channel/nats-jet-stream.channel';
|
|
3
|
+
export declare class NatsJetStreamMessagingConsumer implements IMessagingConsumer<NatsJetStreamChannel> {
|
|
4
|
+
private channel?;
|
|
5
|
+
consume(dispatcher: ConsumerMessageDispatcher, channel: NatsJetStreamChannel): Promise<void>;
|
|
6
|
+
onError(errored: ConsumerDispatchedMessageError, channel: NatsJetStreamChannel): Promise<void>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.NatsJetStreamMessagingConsumer = void 0;
|
|
10
|
+
const messaging_1 = require("@nestjstools/messaging");
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const nats_jet_stream_channel_1 = require("../channel/nats-jet-stream.channel");
|
|
13
|
+
const jsapi_types_1 = require("nats/lib/jetstream/jsapi_types");
|
|
14
|
+
const nats_jet_stream_channel_config_1 = require("../channel/nats-jet-stream-channel.config");
|
|
15
|
+
let NatsJetStreamMessagingConsumer = class NatsJetStreamMessagingConsumer {
|
|
16
|
+
channel = undefined;
|
|
17
|
+
async consume(dispatcher, channel) {
|
|
18
|
+
this.channel = channel;
|
|
19
|
+
const jsm = await channel.jetStreamManager();
|
|
20
|
+
const js = await channel.jetStreamClient();
|
|
21
|
+
try {
|
|
22
|
+
await jsm.streams.info(channel.config.streamConfig.streamName);
|
|
23
|
+
if (channel.config.streamConfig.autoUpdate) {
|
|
24
|
+
await jsm.streams.update(channel.config.streamConfig.streamName, {
|
|
25
|
+
subjects: channel.config.streamConfig.deliverSubjects,
|
|
26
|
+
max_msgs: channel.config.streamConfig.maxMsgs,
|
|
27
|
+
max_bytes: channel.config.streamConfig.maxBytes,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
if (err.code === '404') {
|
|
33
|
+
await jsm.streams.add({
|
|
34
|
+
name: channel.config.streamConfig.streamName,
|
|
35
|
+
subjects: channel.config.streamConfig.deliverSubjects,
|
|
36
|
+
max_msgs: channel.config.streamConfig.maxMsgs,
|
|
37
|
+
max_bytes: channel.config.streamConfig.maxBytes,
|
|
38
|
+
retention: jsapi_types_1.RetentionPolicy.Interest,
|
|
39
|
+
storage: channel.config.streamConfig.storageType === nats_jet_stream_channel_config_1.StorageType.Memory
|
|
40
|
+
? jsapi_types_1.StorageType.Memory
|
|
41
|
+
: jsapi_types_1.StorageType.File,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
await jsm.consumers.add(channel.config.streamConfig.streamName, {
|
|
50
|
+
durable_name: channel.config.consumerConfig.durableName,
|
|
51
|
+
filter_subject: channel.config.consumerConfig.subject,
|
|
52
|
+
ack_policy: jsapi_types_1.AckPolicy.None,
|
|
53
|
+
deliver_policy: jsapi_types_1.DeliverPolicy.New,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
if (channel.config.consumerConfig.autoUpdate &&
|
|
58
|
+
channel.config.consumerConfig.durableName) {
|
|
59
|
+
await jsm.consumers.update(channel.config.streamConfig.streamName, channel.config.consumerConfig.durableName, {
|
|
60
|
+
filter_subject: channel.config.consumerConfig.subject,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const consumer = await js.consumers.get(channel.config.streamConfig.streamName, channel.config.consumerConfig.durableName);
|
|
65
|
+
const messages = await consumer.consume();
|
|
66
|
+
async function consumeMessages() {
|
|
67
|
+
for await (const msg of messages) {
|
|
68
|
+
const headers = msg.headers ?? undefined;
|
|
69
|
+
const deserialized = msg.json();
|
|
70
|
+
await dispatcher.dispatch(new messaging_1.ConsumerMessage(deserialized, headers?.get('messaging-routing-key') ?? msg.subject));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
consumeMessages();
|
|
74
|
+
return Promise.resolve();
|
|
75
|
+
}
|
|
76
|
+
async onError(errored, channel) {
|
|
77
|
+
return Promise.resolve();
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
exports.NatsJetStreamMessagingConsumer = NatsJetStreamMessagingConsumer;
|
|
81
|
+
exports.NatsJetStreamMessagingConsumer = NatsJetStreamMessagingConsumer = __decorate([
|
|
82
|
+
(0, common_1.Injectable)(),
|
|
83
|
+
(0, messaging_1.MessageConsumer)(nats_jet_stream_channel_1.NatsJetStreamChannel)
|
|
84
|
+
], NatsJetStreamMessagingConsumer);
|
|
85
|
+
//# sourceMappingURL=nats-jet-stream-messaging-consumer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats-jet-stream-messaging-consumer.js","sourceRoot":"","sources":["../../src/consumer/nats-jet-stream-messaging-consumer.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ let NatsMessagingConsumer = class NatsMessagingConsumer {
|
|
|
25
25
|
const headers = msg.headers ?? undefined;
|
|
26
26
|
const deserialized = JSON.parse(msg.string());
|
|
27
27
|
dispatcher.dispatch(new messaging_1.ConsumerMessage(deserialized, headers?.get('messaging-routing-key') ?? msg.subject));
|
|
28
|
-
}
|
|
28
|
+
},
|
|
29
29
|
});
|
|
30
30
|
return Promise.resolve();
|
|
31
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nats-messaging-consumer.js","sourceRoot":"","sources":["../../src/consumer/nats-messaging-consumer.ts"],"names":[],"mappings":";;;;;;;;;AAAA,0DAAsD;AACtD,sDAA6E;AAE7E,2CAAmE;AACnE,sDAAyD;AAMlD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;
|
|
1
|
+
{"version":3,"file":"nats-messaging-consumer.js","sourceRoot":"","sources":["../../src/consumer/nats-messaging-consumer.ts"],"names":[],"mappings":";;;;;;;;;AAAA,0DAAsD;AACtD,sDAA6E;AAE7E,2CAAmE;AACnE,sDAAyD;AAMlD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAGxB,OAAO,GAAiB,SAAS,CAAC;IAClC,MAAM,GAAoB,SAAS,CAAC;IAE5C,KAAK,CAAC,OAAO,CACX,UAAqC,EACrC,OAAoB;QAEpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAExC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE;YACnD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACrB,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/C,CAAC;gBAED,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;gBAEzC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9C,UAAU,CAAC,QAAQ,CACjB,IAAI,2BAAe,CACjB,YAAY,EACZ,OAAO,EAAE,GAAG,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC,OAAO,CACrD,CACF,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAAuC,EACvC,OAAoB;QAEpB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,MAAe;QACzC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;CACF,CAAA;AA/CY,sDAAqB;gCAArB,qBAAqB;IAFjC,IAAA,mBAAU,GAAE;IACZ,IAAA,2BAAe,EAAC,0BAAW,CAAC;GAChB,qBAAqB,CA+CjC"}
|
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./messaging-nats-extension.module"), exports);
|
|
18
|
+
__exportStar(require("./channel/nats-channel.config"), exports);
|
|
19
|
+
__exportStar(require("./channel/nats-jet-stream-channel.config"), exports);
|
|
20
|
+
__exportStar(require("./message-bus/nats-message-bus"), exports);
|
|
21
|
+
__exportStar(require("./message-bus/nats-jet-stream-message-bus"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oEAAkD;AAClD,gEAA8C;AAC9C,2EAAyD;AACzD,iEAA+C;AAC/C,4EAA0D"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IMessageBusFactory } from '@nestjstools/messaging';
|
|
2
|
+
import { IMessageBus } from '@nestjstools/messaging';
|
|
3
|
+
import { NatsJetStreamChannel } from '../channel/nats-jet-stream.channel';
|
|
4
|
+
export declare class NatsJetStreamMessageBusFactory implements IMessageBusFactory<NatsJetStreamChannel> {
|
|
5
|
+
create(channel: NatsJetStreamChannel): IMessageBus;
|
|
6
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.NatsJetStreamMessageBusFactory = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const messaging_1 = require("@nestjstools/messaging");
|
|
12
|
+
const nats_jet_stream_channel_1 = require("../channel/nats-jet-stream.channel");
|
|
13
|
+
const nats_jet_stream_message_bus_1 = require("./nats-jet-stream-message-bus");
|
|
14
|
+
let NatsJetStreamMessageBusFactory = class NatsJetStreamMessageBusFactory {
|
|
15
|
+
create(channel) {
|
|
16
|
+
return new nats_jet_stream_message_bus_1.NatsJetStreamMessageBus(channel);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
exports.NatsJetStreamMessageBusFactory = NatsJetStreamMessageBusFactory;
|
|
20
|
+
exports.NatsJetStreamMessageBusFactory = NatsJetStreamMessageBusFactory = __decorate([
|
|
21
|
+
(0, common_1.Injectable)(),
|
|
22
|
+
(0, messaging_1.MessageBusFactory)(nats_jet_stream_channel_1.NatsJetStreamChannel)
|
|
23
|
+
], NatsJetStreamMessageBusFactory);
|
|
24
|
+
//# sourceMappingURL=nats-jet-stream-message-bus-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats-jet-stream-message-bus-factory.js","sourceRoot":"","sources":["../../src/message-bus/nats-jet-stream-message-bus-factory.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAE5C,sDAA2D;AAE3D,gFAA0E;AAC1E,+EAAwE;AAIjE,IAAM,8BAA8B,GAApC,MAAM,8BAA8B;IAGzC,MAAM,CAAC,OAA6B;QAClC,OAAO,IAAI,qDAAuB,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF,CAAA;AANY,wEAA8B;yCAA9B,8BAA8B;IAF1C,IAAA,mBAAU,GAAE;IACZ,IAAA,6BAAiB,EAAC,8CAAoB,CAAC;GAC3B,8BAA8B,CAM1C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { RoutingMessage } from '@nestjstools/messaging';
|
|
2
|
+
import { IMessageBus } from '@nestjstools/messaging';
|
|
3
|
+
import { NatsJetStreamChannel } from '../channel/nats-jet-stream.channel';
|
|
4
|
+
export declare class NatsJetStreamMessageBus implements IMessageBus {
|
|
5
|
+
private readonly channel;
|
|
6
|
+
constructor(channel: NatsJetStreamChannel);
|
|
7
|
+
dispatch(message: RoutingMessage): Promise<object | void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.NatsJetStreamMessageBus = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const nats_1 = require("nats");
|
|
15
|
+
const nats_jet_stream_channel_1 = require("../channel/nats-jet-stream.channel");
|
|
16
|
+
let NatsJetStreamMessageBus = class NatsJetStreamMessageBus {
|
|
17
|
+
channel;
|
|
18
|
+
constructor(channel) {
|
|
19
|
+
this.channel = channel;
|
|
20
|
+
}
|
|
21
|
+
async dispatch(message) {
|
|
22
|
+
const js = await this.channel.jetStreamClient();
|
|
23
|
+
let routingKey = this.channel.config.consumerConfig.subject;
|
|
24
|
+
const h = (0, nats_1.headers)();
|
|
25
|
+
if (this.channel.config.consumerConfig.subject.includes('>') ||
|
|
26
|
+
this.channel.config.consumerConfig.subject.includes('*')) {
|
|
27
|
+
routingKey = message.messageRoutingKey;
|
|
28
|
+
}
|
|
29
|
+
h.set('messaging-routing-key', message.messageRoutingKey);
|
|
30
|
+
js.publish(routingKey, JSON.stringify(message.message), {
|
|
31
|
+
headers: h,
|
|
32
|
+
}).catch((err) => { });
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.NatsJetStreamMessageBus = NatsJetStreamMessageBus;
|
|
36
|
+
exports.NatsJetStreamMessageBus = NatsJetStreamMessageBus = __decorate([
|
|
37
|
+
(0, common_1.Injectable)(),
|
|
38
|
+
__metadata("design:paramtypes", [nats_jet_stream_channel_1.NatsJetStreamChannel])
|
|
39
|
+
], NatsJetStreamMessageBus);
|
|
40
|
+
//# sourceMappingURL=nats-jet-stream-message-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats-jet-stream-message-bus.js","sourceRoot":"","sources":["../../src/message-bus/nats-jet-stream-message-bus.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,2CAA4C;AAC5C,+BAA+B;AAC/B,gFAA0E;AAGnE,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IACL;IAA7B,YAA6B,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;IAAG,CAAC;IAE9D,KAAK,CAAC,QAAQ,CAAC,OAAuB;QACpC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAEhD,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC;QAC5D,MAAM,CAAC,GAAG,IAAA,cAAO,GAAE,CAAC;QAEpB,IACE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YACxD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EACxD,CAAC;YACD,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACzC,CAAC;QAED,CAAC,CAAC,GAAG,CAAC,uBAAuB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAE1D,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACtD,OAAO,EAAE,CAAC;SACX,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC;IACxB,CAAC;CACF,CAAA;AAtBY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;qCAE2B,8CAAoB;GAD/C,uBAAuB,CAsBnC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { IMessageBusFactory } from
|
|
2
|
-
import { IMessageBus } from
|
|
1
|
+
import { IMessageBusFactory } from '@nestjstools/messaging';
|
|
2
|
+
import { IMessageBus } from '@nestjstools/messaging';
|
|
3
3
|
import { NatsChannel } from '../channel/nats.channel';
|
|
4
4
|
export declare class NatsMessageBusFactory implements IMessageBusFactory<NatsChannel> {
|
|
5
5
|
create(channel: NatsChannel): IMessageBus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nats-message-bus-factory.js","sourceRoot":"","sources":["../../src/message-bus/nats-message-bus-factory.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,yDAAoD;AAEpD,
|
|
1
|
+
{"version":3,"file":"nats-message-bus-factory.js","sourceRoot":"","sources":["../../src/message-bus/nats-message-bus-factory.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,yDAAoD;AAEpD,sDAA2D;AAE3D,0DAAsD;AAI/C,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,MAAM,CAAC,OAAoB;QACzB,OAAO,IAAI,iCAAc,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CACF,CAAA;AAJY,sDAAqB;gCAArB,qBAAqB;IAFjC,IAAA,mBAAU,GAAE;IACZ,IAAA,6BAAiB,EAAC,0BAAW,CAAC;GAClB,qBAAqB,CAIjC"}
|
|
@@ -22,7 +22,8 @@ let NatsMessageBus = class NatsMessageBus {
|
|
|
22
22
|
const client = await this.channel.client;
|
|
23
23
|
let routingKey = this.channel.config.subscriberName;
|
|
24
24
|
const h = (0, nats_1.headers)();
|
|
25
|
-
if (this.channel.config.subscriberName.includes('>') ||
|
|
25
|
+
if (this.channel.config.subscriberName.includes('>') ||
|
|
26
|
+
this.channel.config.subscriberName.includes('*')) {
|
|
26
27
|
routingKey = message.messageRoutingKey;
|
|
27
28
|
}
|
|
28
29
|
h.set('messaging-routing-key', message.messageRoutingKey);
|