mongodb-session-serializer

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 Driver MongoDB Community Test
1 5.x.x 6.x OK
2 6.x.x 7.x OK

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

Generated using TypeDoc