UNPKG

event-message-broker

Version:

A Message Bus that uses AWS Stack and RabbitMQ

100 lines (99 loc) 4.29 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AWSBus = void 0; const o11y_1 = require("../../application/utils/o11y"); const EventBridgeService_1 = require("./EventBridgeService"); const SNSService_1 = require("./SNSService"); const SQSService_1 = require("./SQSService"); const api_1 = require("@opentelemetry/api"); class AWSBus { constructor() { this.eventBridge = new EventBridgeService_1.EventBridgeService(); this.sqs = new SQSService_1.SQSService(); this.sns = new SNSService_1.SNSService(); } publish(topicName, message) { return __awaiter(this, void 0, void 0, function* () { yield this.handleSpan((span) => __awaiter(this, void 0, void 0, function* () { span.setAttribute('topic', topicName); const messageId = yield this.sns.publish(topicName, message); span.addEvent('message-published', { provider: 'aws-sns', messageId, correlationId: message.CorrelationId }); })); }); } send(queueName, message, params) { return __awaiter(this, void 0, void 0, function* () { yield this.handleSpan((span) => __awaiter(this, void 0, void 0, function* () { span.setAttribute('queue', queueName); const messageId = yield this.sqs.send(queueName, message, params); span.addEvent('message-sent', { provider: 'aws-sqs', messageId, correlationId: message.CorrelationId }); })); }); } redelivery(params) { return __awaiter(this, void 0, void 0, function* () { yield this.handleSpan((span) => __awaiter(this, void 0, void 0, function* () { span.setAttribute('queue', params.QueueName); const output = yield this.sqs.redelivery(params); span.addEvent('message-redelivered', { provider: 'aws-sqs', messageId: output.messageId, correlationId: params.Message.Object.CorrelationId, delay: params.DelaySeconds + 's', attempt: output.attempt, startsAt: output.startsAt }); })); }); } schedule(params) { return __awaiter(this, void 0, void 0, function* () { yield this.handleSpan((span) => __awaiter(this, void 0, void 0, function* () { span.setAttribute('topic', params.TopicName); const output = yield this.eventBridge.schedule(params); span.addEvent('message-scheduled', { correlationId: params.Message.CorrelationId, scheduleName: output.Id, scheduleArn: output.ScheduleArn }); })); }); } consume(params) { this.sqs.consume(params); } handleSpan(func) { return __awaiter(this, void 0, void 0, function* () { const span = (0, o11y_1.startSpan)('bus', api_1.SpanKind.PRODUCER); try { yield func(span); } catch (error) { span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: error.message }); span.recordException(error); throw error; } finally { span.end(); } }); } } exports.AWSBus = AWSBus;