vhidvz / mongodb-session-serializer

MongoDB Session Serializer/Deserializer

Home Page:https://vhidvz.github.io/mongodb-session-serializer/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

# Driver MongoDB
1 5.x ( mongoose 7.x ) 6.x OK
2 6.x ( mongoose 8.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

About

MongoDB Session Serializer/Deserializer

https://vhidvz.github.io/mongodb-session-serializer/

License:MIT License


Languages

Language:TypeScript 97.3%Language:JavaScript 2.7%