# Technical Overview
The Ringier Event Bus is composed of several key components:
- 5 core services written in Go (opens new window): Feeder, Emitter, Receiver, Nodes and Users.
- a RabbitMQ (opens new window) server.
- a DynamoDB (opens new window) AWS service.
Figure 1: Infrastructure overview
Figure 2: Events Flow
# Core services
The core services are microservices (opens new window) which intercommunicate actively using JSON over REST APIs. The microservices are all behind a VPC and communicate (if necessary) using JWT as an extra layer of security.
# Feeder
The Feeder service is responsible of accepting events from the nodes, performing verification and validation checks, and publishing those events to the RabbitMQ server.
# Emitter
The Emitter service is is responsible for routing the events to the receivers that match the routing rule. It also adds the node specific config and sets auth headers.
# Receiver
The Receiver service is responsible for consuming events from the RabbitMQ server and forwarding them to the configured endpoints.
# Nodes
The Nodes service allows nodes to register themselves with the Ringier Event Bus. It also allows nodes to update their configurations.
# Users
The Users service allows nodes to authenticate against the Ringier Event Bus before emitting events.
# RabbitMQ
The RabbitMQ is used as the primary message broker which the entire microservice architecture publish and consume from.
# DynamoDB
The DynamoDB AWS service acts as long-term storage solution for the core services. Information as users and nodes configurations are stored there.