1.0.4 • Published 8 months ago

mongodb-session-serializer v1.0.4

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

MongoDB Session Serializer/Deserializer

npm npm Coverage GitHub documentation Build, Test and Publish

This package helps you serialize a MongoDB session and use it in a microservices environment on the same MongoDB infrastructure to have ACID at the database level.

  • Support for multi-database transactions on the same MongoDB infrastructure

Quick Start Guide

#NodeJS DriverMongoDB CommunityTest
15.x.x6.xOK
26.x.x7.xOK

Installation

npm install --save mongodb mongodb-session-serializer

Serializing

import { MongoClient, ReadPreference, TransactionOptions } from 'mongodb';
import { sessionSerializer } from 'mongodb-session-serializer';

export const transactionOptions: TransactionOptions = {
  readPreference: ReadPreference.primary,
  readConcern: { level: 'snapshot' },
  writeConcern: { w: 'majority' },

  maxCommitTimeMS: 15 * 60 * 1000, // 15 mins
};

// Connection URL - https://github.com/vhidvz/mongo-rs
const url =
  'mongodb://root:password123@mongodb-primary:27017,mongodb-secondary-1:27018,mongodb-secondary-2:27019,mongodb-arbiter:27020/?replicaSet=rs0';
const client = new MongoClient(url);

await client.connect();

const session = await client.startSession();

try {
  session.startTransaction(transactionOptions);

  // do anything you want...

  const serializedSession = sessionSerializer(session);
  // send the serialized session to another microservice
} catch {
  await session.abortTransaction();
}

Deserializing

import { MongoClient, ReadPreference, TransactionOptions } from 'mongodb';
import { sessionDeserializer } from 'mongodb-session-serializer';

export const transactionOptions: TransactionOptions = {
  readPreference: ReadPreference.primary,
  readConcern: { level: 'snapshot' },
  writeConcern: { w: 'majority' },

  maxCommitTimeMS: 15 * 60 * 1000, // 15 mins
};

// Connection URL - https://github.com/vhidvz/mongo-rs
const url =
  'mongodb://root:password123@mongodb-primary:27017,mongodb-secondary-1:27018,mongodb-secondary-2:27019,mongodb-arbiter:27020/?replicaSet=rs0';
const client = new MongoClient(url);

await client.connect();

const session = sessionDeserializer(client, /* serialized session */);

try {
  session.startTransaction(transactionOptions);

  // do anything you want...

  await session.commitTransaction();
} catch {
  await session.abortTransaction();
} finally {
  await session.endSession();
}

License

MIT