Concursus: Event Sourcing for the Internet of Things
Concursus is a modern framework for building event sourcing applications in Java 8. It supports Cassandra and Redis back-ends, and provides Spring modules for easy integration into Spring and Spring Boot projects.
We present Concursus, a framework for developing distributed applications using CQRS and event sourcing patterns within a modern, Java 8-centric, programming model. Following a high-level survey of the trends leading towards the adoption of these patterns, we show how Concursus simplifies the task of programming event sourcing applications by providing a concise, intuitive API to systems composed of event processing middleware. We provide a brief account of a distributed, microservice-based architecture which we successfully implemented using these techniques. We then discuss the scalability, reliability and fault-tolerance characteristics an event system should have, and how Concursus supports building systems with these characteristics. Finally, we indicate some future directions in event sourcing and stream processing technology, and suggest how Concursus can be integrated with emerging technologies such as Apache Kafka.
Concursus Blog Series
Concursus is an open source Java 8 framework for building distributed systems using CQRS and event sourcing patterns. One of its major differences from other such frameworks (such as Jdon, Axon and ES4J) is that it eschews a programming model where each event type is represented by a separate Java class, instead mapping event types to methods on interfaces. Read more
In a conventional RDBMS-with-ORM system, we are used to thinking of domain objects as mapped to rows in database tables, and of the database as a repository where the current state of every object exists simultaneously, so that what we get when we query for an object is the state that object was in at the time the query was issued. To perform an update, we can start a transaction, retrieve the current state of the object, modify it, save it back again and commit. Read more
The approach discussed in the previous two posts provides a concise, convenient client API to the Concursus event system; however the core of the system defines events and event-handling mechanisms without reference to any of the reflection-based machinery used to implement this API. Read more
In this post, I’ll demonstrate an alternative API which uses some of the advanced language features of the new Kotlin language from Jetbrains. As Kotlin is a JVM-based language, it interoperates seamlessly with Concursus’s Java 8 classes; however, it also offers powerful ways to extend their functionality. Read more