UNPKG

@nestjstools/messaging-nats-extension

Version:

Extension to handle messages and dispatch them over Nats

85 lines 4.44 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 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; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.NatsJetStreamMessagingConsumer = void 0; const messaging_1 = require("@nestjstools/messaging"); const common_1 = require("@nestjs/common"); const nats_jet_stream_channel_1 = require("../channel/nats-jet-stream.channel"); const jsapi_types_1 = require("nats/lib/jetstream/jsapi_types"); const nats_jet_stream_channel_config_1 = require("../channel/nats-jet-stream-channel.config"); let NatsJetStreamMessagingConsumer = class NatsJetStreamMessagingConsumer { channel = undefined; async consume(dispatcher, channel) { this.channel = channel; const jsm = await channel.jetStreamManager(); const js = await channel.jetStreamClient(); try { await jsm.streams.info(channel.config.streamConfig.streamName); if (channel.config.streamConfig.autoUpdate) { await jsm.streams.update(channel.config.streamConfig.streamName, { subjects: channel.config.streamConfig.deliverSubjects, max_msgs: channel.config.streamConfig.maxMsgs, max_bytes: channel.config.streamConfig.maxBytes, }); } } catch (err) { if (err.code === '404') { await jsm.streams.add({ name: channel.config.streamConfig.streamName, subjects: channel.config.streamConfig.deliverSubjects, max_msgs: channel.config.streamConfig.maxMsgs, max_bytes: channel.config.streamConfig.maxBytes, retention: jsapi_types_1.RetentionPolicy.Interest, storage: channel.config.streamConfig.storageType === nats_jet_stream_channel_config_1.StorageType.Memory ? jsapi_types_1.StorageType.Memory : jsapi_types_1.StorageType.File, }); } else { throw err; } } try { await jsm.consumers.add(channel.config.streamConfig.streamName, { durable_name: channel.config.consumerConfig.durableName, filter_subject: channel.config.consumerConfig.subject, ack_policy: jsapi_types_1.AckPolicy.None, deliver_policy: jsapi_types_1.DeliverPolicy.New, }); } catch (e) { if (channel.config.consumerConfig.autoUpdate && channel.config.consumerConfig.durableName) { await jsm.consumers.update(channel.config.streamConfig.streamName, channel.config.consumerConfig.durableName, { filter_subject: channel.config.consumerConfig.subject, }); } } const consumer = await js.consumers.get(channel.config.streamConfig.streamName, channel.config.consumerConfig.durableName); const messages = await consumer.consume(); async function consumeMessages() { for await (const msg of messages) { const headers = msg.headers ?? undefined; const deserialized = msg.json(); await dispatcher.dispatch(new messaging_1.ConsumerMessage(deserialized, headers?.get('messaging-routing-key') ?? msg.subject)); } } consumeMessages(); return Promise.resolve(); } async onError(errored, channel) { return Promise.resolve(); } }; exports.NatsJetStreamMessagingConsumer = NatsJetStreamMessagingConsumer; exports.NatsJetStreamMessagingConsumer = NatsJetStreamMessagingConsumer = __decorate([ (0, common_1.Injectable)(), (0, messaging_1.MessageConsumer)(nats_jet_stream_channel_1.NatsJetStreamChannel) ], NatsJetStreamMessagingConsumer); //# sourceMappingURL=nats-jet-stream-messaging-consumer.js.map