0.0.10 • Published 5 years ago

mongodb-eventmachine v0.0.10

Weekly downloads
41
License
-
Repository
-
Last release
5 years ago

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('...');
0.0.10

5 years ago

0.0.9

5 years ago

0.0.8

5 years ago

0.0.7

5 years ago

0.0.6

5 years ago

0.0.5

5 years ago

0.0.4

5 years ago

0.0.3

5 years ago

0.0.2

5 years ago

0.0.1

5 years ago