UNPKG

@niur/nestjs-service-bus

Version:

NestJS Azure Service Bus Microservice Transport

114 lines 4.76 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.AzureServiceBusClient = void 0; const service_bus_1 = require("@azure/service-bus"); const common_1 = require("@nestjs/common"); const _1 = require("."); let AzureServiceBusClient = class AzureServiceBusClient extends _1.AzureServiceBusClientProxy { constructor(options) { super(); this.options = options; this.createMessageHandlers = (packet) => ({ processMessage: async (receivedMessage) => { await this.handleMessage(receivedMessage, packet); }, processError: async (args) => { return new Promise(() => { throw new Error(`Error processing message: ${args.error}`); }); }, }); this.getReplyTo = (pattern) => { return `${pattern}.reply`; }; this.initializeSerializer(options); this.initializeDeserializer(options); } connect() { if (!this.sbClient) { this.sbClient = this.createServiceBusClient(); } return Promise.resolve(); } async dispatchEvent(packet) { const pattern = this.normalizePattern(packet.pattern); const { name, options } = JSON.parse(pattern); const messages = this.serializer.serialize(packet.data); const sender = this.sbClient.createSender(name); await sender.sendMessages(messages, options); await sender.close(); } publish(partialPacket, callback) { try { const packet = this.assignPacketId(partialPacket); const pattern = this.normalizePattern(packet.pattern); const { name, options } = JSON.parse(pattern); const serializedPacket = this.serializer.serialize(packet.data); const replyTo = this.getReplyTo(name); const sender = this.sbClient.createSender(name); const receiver = this.sbClient.createReceiver(replyTo); let messages = [ Object.assign(Object.assign({ messageId: packet.id }, serializedPacket), { replyTo }), ]; if (Array.isArray(serializedPacket)) { messages = serializedPacket.map((msg) => (Object.assign(Object.assign({ messageId: packet.id }, msg), { replyTo }))); } this.routingMap.set(packet.id, callback); sender.sendMessages(messages, options); if (replyTo) { receiver.subscribe(this.createMessageHandlers(packet)); } return () => { sender.close(); receiver.close(); this.routingMap.delete(packet.id); }; } catch (err) { callback({ err }); } } async handleMessage(receivedMessage, packet) { const { id, isDisposed } = await this.deserializer.deserialize(packet); const { body, correlationId, replyTo } = receivedMessage; if (replyTo && id !== correlationId) { return undefined; } const callback = this.routingMap.get(id); if (!callback) { return undefined; } if (isDisposed) { callback({ response: body, isDisposed: true, }); } callback({ response: body, }); } createServiceBusClient() { const { connectionString, options } = this.options; return new service_bus_1.ServiceBusClient(connectionString, options); } async close() { var _a; await ((_a = this.sbClient) === null || _a === void 0 ? void 0 : _a.close()); } }; exports.AzureServiceBusClient = AzureServiceBusClient; exports.AzureServiceBusClient = AzureServiceBusClient = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [Object]) ], AzureServiceBusClient); //# sourceMappingURL=azure-service-bus.client.js.map