Internal Junebug is structured as a set of services that live within a single process.
Each Junebug channel creates three services – a transport, a message forwarder and a status receiver.
Transports are Vumi transport workers that send and receive SMSes, USSD requests or other text messages from external service providers such as MNOs ( mobile network operators) or aggregators (re-sellers of connections to multiple MNOs).
Message Forwarders receive inbound (MO, mobile originated) messages from transports and relay to applications either via HTTP or AMQP depending on the channel configuration.
Channel Status Processors receive status events from transports and store them in redis and forward them on via HTTP to interested applications.
Junebug uses Redis to store configuration and temporary state such as channel status. Services that use Redis are marked with an “R” in the diagram below. Some types of transports will also make use of Redis.