1.0.4 • Published 8 months ago
mongodb-session-serializer v1.0.4
MongoDB Session Serializer/Deserializer
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();
}