/
Event based system
Event based system
problem Statement
Current system is not event driven. And all background jobs are handled by one or more actors , it can have following problems:
- Each background job is calling different actor and doing predefined set of actions. (So it's tightly coupled)
- System state can become inconsistent if asynchronous call fails due to system failure.
- For each job we are passing different set of data (no predefined event structure)
- Difficult to generate the audit logs
Solution Approach
EventPublisher will hold the producer for which the produce calls on event will be made
EventPublisher
public interface EventPublisher{ public void publish(Event event); } public class EventPublisherImpl implements EventPublisher{ private Producer producer; private static EventPublisherImpl eventPublisher; public static EventPublisher getInstance(){ if(eventPublisher==null){ instance = initialize(); } return instance; } public void publish(Event event){ producer.produce(event); } public static EventPublisher initialize(){ EventPublisher publisher = new EventPublisherImpl(); //read setting and initialize producer by calling producer factory return publisher; } }
there could be multiple producer with each having it's own processing of events
Producer
public interface Producer{ public void produce(Event event); } public class KafkaEventProducer implements Producer { public void produce(Event event){ // push events to kafka topics } } public class ActiveMQEventProducer implements Producer { public void produce(Event event){ // push events as json file to s3 } } public class LMaxEventProducer implements Producer { public void produce(Event event){ // push events in memory } }
Consumer:
public interface IConsumer{ public void consume(); } public class ConsumerImpl implements IConsumer{ public IConsumer consumer = ConsumerFactory.getInstance(); @Override public void consume() { // consume events } } public class ConsumerFactory{ public static IConsumer getInstance(){ return new ConsumerImpl(); }
, multiple selections available,
Related content
Event-based background jobs
Event-based background jobs
More like this
Data Persistence while processing events using kafka/ queues.
Data Persistence while processing events using kafka/ queues.
More like this
Reliable Event Driven Learner Service Architecture
Reliable Event Driven Learner Service Architecture
More like this
Design for easy way to update content
Design for easy way to update content
More like this
Course Infra - Async Jobs - Implementation Design
Course Infra - Async Jobs - Implementation Design
More like this