UNPKG

@nestjstools/messaging-rabbitmq-extension

Version:

Extension to handle messages and dispatch them over AMQP protocol

74 lines 3.88 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_message_options_1 = require("../message/amqp-message-options"); const amqp_channel_1 = require("../channel/amqp.channel"); const messaging_1 = require("@nestjstools/messaging"); const amqp_message_builder_1 = require("./amqp-message.builder"); const const_1 = require("../const"); let AmqpMessageBus = class AmqpMessageBus { constructor(amqpChanel) { this.amqpChanel = amqpChanel; this.connection = amqpChanel.connection; } async dispatch(message) { 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(); const publisher = await this.connection.createPublisher(); await publisher.send(amqpMessage.envelope, amqpMessage.message); await publisher.close(); } createMessageBuilderWhenUndefined(message) { const messageBuilder = amqp_message_builder_1.AmqpMessageBuilder.create(); messageBuilder .withMessage(message.message) .withExchangeName(this.amqpChanel.config.exchangeName); if (this.amqpChanel.config.exchangeType === messaging_1.ExchangeType.DIRECT) { messageBuilder.withRoutingKey(this.getRoutingKey(message)); } if (this.amqpChanel.config.exchangeType === messaging_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.amqpChanel.config.exchangeName) .withRoutingKey(options.routingKey ?? this.getRoutingKey(message)) .withHeaders(options.headers); return messageBuilder; } getRoutingKey(message) { return this.amqpChanel.config.bindingKeys !== undefined ? this.amqpChanel.config.bindingKeys.length > 0 ? this.amqpChanel.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