mongodb-eventmachine
v0.0.10
Published
## Create, Fetch, Acquire and Handle - events being saved as MongoDB documents.
Downloads
8
Readme
MongoDB Eventmachine
Create, Fetch, Acquire and Handle - events being saved as MongoDB documents.
What is MongoDB Eventmachine
MongoDB Eventmachine is a class to instantiate event producers and consumers. It can be used to develop all kinds of event based systems, for example a engine to execute BPMN processes. It's an embedded server, when initialized with event handlers it functions as a worker/consumer, otherwise as a manager/producer. In both cases a connection to a MongoDB database is opened and listened to.
How does MongoDB Eventmachine work under the hood
When created with handlers, once a machine instance is listening it creates a backoff function which checks for new work to handle (it is looking for unclaimed events). Whenever a event is found, the machine tries to claim it, it could happen that another machine instance is also trying to claim it but only one will win. Whoever claims the event will try to handle it and when handled set it to handled. A producer can be used to create new events and a consumer to handle those.
Examples
Worker/Consumer
const EventMachine = require('@grit/mongodb-eventmachine');
const eventMachine = new EventMachine(
{
dbUrl: 'mongodb://localhost:27017',
DEFAULT_PRIORITY: 50,
batchSize: 1, // Optional (default: 1), set how many events you want to fetch, acquire and handle at once
intentScope: ['CREATE_SOMETHING'] // Optional, this worker/consumer only handles events with the intent CREATE_SOMETHING, [] means nothing will be handled, not defining it means all handlers will be handled
},
{
CREATE_SOMETHING: event => {
console.log('create something', event._id);
}
}
);
eventMachine.listen().catch(err => console.error(err));
Manager/Producer
const EventMachine = require('@grit/mongodb-eventmachine');
const eventMachine = new EventMachine({
dbUrl: 'mongodb://localhost:27017',
DEFAULT_PRIORITY: 50
});
eventMachine.listen().catch(err => console.error(err));
for (let i = 0; i <= 1; i++) {
eventMachine.createNewEvent({
intent: 'CREATE_SOMETHING',
time: new Date().getTime() - 1
});
}
Directly access the database schema
const Event = require('@grit/mongodb-eventmachine/lib/schemas/Event');
const specificEvent = await Event.findById('...');