UNPKG

@nestjstools/messaging-rabbitmq-extension

Version:

Extension to handle messages and dispatch them over AMQP protocol

80 lines 4.21 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; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AmqpMessageBus = void 0; const common_1 = require("@nestjs/common"); const amqp_channel_1 = require("../channel/amqp.channel"); const amqp_message_options_1 = require("../message/amqp-message-options"); const amqp_message_builder_1 = require("./amqp-message.builder"); const const_1 = require("../const"); const rmq_channel_config_1 = require("../channel/rmq-channel.config"); let AmqpMessageBus = class AmqpMessageBus { constructor(amqpChannel) { this.amqpChannel = amqpChannel; } async dispatch(message) { await this.amqpChannel.init(); await this.initPublisherChannel(); if (message.messageOptions !== undefined && !(message.messageOptions instanceof amqp_message_options_1.AmqpMessageOptions)) { throw new Error(`Message options must be a ${amqp_message_options_1.AmqpMessageOptions.name} object`); } const messageBuilder = message.messageOptions === undefined ? this.createMessageBuilderWhenUndefined(message) : this.createMessageBuilderWhenDefined(message); messageBuilder.addHeader(const_1.RABBITMQ_HEADER_ROUTING_KEY, message.messageRoutingKey); const amqpMessage = messageBuilder.buildMessage(); await this.publisherChannel.publish(amqpMessage.envelope.exchange, amqpMessage.envelope.routingKey, Buffer.from(JSON.stringify(amqpMessage.message)), { headers: amqpMessage.envelope.headers, }); } async initPublisherChannel() { if (!this.publisherChannel && this.amqpChannel.connection) { this.publisherChannel = await this.amqpChannel.connection.createChannel(); } } createMessageBuilderWhenUndefined(message) { const messageBuilder = amqp_message_builder_1.AmqpMessageBuilder.create(); messageBuilder .withMessage(message.message) .withExchangeName(this.amqpChannel.config.exchangeName); if (this.amqpChannel.config.exchangeType === rmq_channel_config_1.ExchangeType.DIRECT) { messageBuilder.withRoutingKey(this.getRoutingKey(message)); } if (this.amqpChannel.config.exchangeType === rmq_channel_config_1.ExchangeType.TOPIC) { messageBuilder.withRoutingKey(message.messageRoutingKey); } return messageBuilder; } createMessageBuilderWhenDefined(message) { const options = message.messageOptions; const messageBuilder = amqp_message_builder_1.AmqpMessageBuilder.create(); messageBuilder .withMessage(message.message) .withExchangeName(options.exchangeName ?? this.amqpChannel.config.exchangeName) .withRoutingKey(options.routingKey ?? this.getRoutingKey(message)) .withHeaders(options.headers); return messageBuilder; } getRoutingKey(message) { return this.amqpChannel.config.bindingKeys !== undefined ? this.amqpChannel.config.bindingKeys.length > 0 ? this.amqpChannel.config.bindingKeys[0] : message.messageRoutingKey : message.messageRoutingKey; } }; exports.AmqpMessageBus = AmqpMessageBus; exports.AmqpMessageBus = AmqpMessageBus = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [amqp_channel_1.AmqpChannel]) ], AmqpMessageBus); //# sourceMappingURL=amqp-message.bus.js.map