Vert.x Introduction
In this tutorial, we are going to discuss about the Vert.x Introduction. Eclipse Vert.x (which we will just call Vert.x in the remainder of this tutorial series) is an opensource project at the Eclipse Foundation. Vert.x was initiated in 2012 by Tim Fox. If you read the definition on vertx.io, it says Vert.x is a tool-kit for building reactive applications on the JVM.
Reactive programming is a programming paradigm, associated with asynchronous streams, which respond to any changes or events. Similarly, Vert.x uses an event bus, to communicate with different parts of the application and passes events, asynchronously to handlers when they available.
Vert.x is not a framework but a toolkit: the core library defines the fundamental APIs for writing asynchronous networked applications, and then you can pick the useful modules for your application (e.g., database connection, monitoring, authentication, logging, service discovery, clustering support, etc). Vert.x is based on the Netty project, a high-performance asynchronous networking library for the JVM. Vert.x will let you access the Netty internals if need be, but in general you will better benefit from the higher-level APIs that Vert.x provides while not sacrificing performance compared to raw Netty.
Vert.x does not impose any packaging or build environment. Since Vert.x core itself is just a regular Jar library it can be embedded inside applications packaged as a set of Jars, a single Jar with all dependencies, or it can even be deployed inside popular component and application containers.
Because Vert.x was designed for asynchronous communications it can deal with more concurrent network connections with less threads than synchronous APIs such as Java servlets or java.net socket classes. Vert.x is useful for a large range of applications: high volume message / event processing, micro-services, API gateways, HTTP APIs for mobile applications, etc. Vert.x and its ecosystem provide all sorts of technical tools for building end-to-end reactive applications.
The essence of Vert.x
The main aim of Vert.x is processing asynchronous events, mostly coming from non-blocking I/O, and the threading model processes events in an event loop.
It is very important to understand that Vert.x is a toolkit and not a framework: it does not provide a predefined foundation for your application, so you are free to use Vert.x as a library inside a larger code base. Vert.x is largely unopinionated on the build tools that you should be using, how you want to structure your code, how you intend to package and deploy it, and so on.
A Vert.x application is an assembly of modules providing exactly what you need, and nothing more. If you don’t need to access a database, then your project does not need to depend on database-related APIs.
The Vert.x project is organized in composable modules, the following figure showing the structure of a random Vert.x application:
A core project, called vertx-core
, provides the APIs for asynchronous programming, non-blocking I/O, streaming, and convenient access to networked protocols such as TCP, UDP, DNS, HTTP, or WebSockets.
A set of modules that are part of the community-supported Vert.x stack, such as a better web API (vertx-web
) or data clients (vertx-kafka-client
, vertx-redis
, vertx-mongo
, etc.) provide functionality for building all kinds of applications.
A wider ecosystem of projects provides even more functionality, such as connecting with Apache Cassandra, non-blocking I/O to communicate between system processes, and so on.
Vert.x is polyglot as it supports most of the popular JVM languages: JavaScript, Ruby, Kotlin, Scala, Groovy, and more. Interestingly, these languages are not just supported through their interoperability with Java. Idiomatic bindings are being generated, so you can write Vert.x code that still feels natural in these languages. For example, the Scala bindings use the Scala future APIs, and the Kotlin bindings leverage custom DSLs and functions with named parameters to simplify some code constructs. And, of course, you can mix and match different supported languages within the same Vert.x application.
That’s all about the Vert.x Introduction. If you have any queries or feedback, please write us email at contact@waytoeasylearn.com. Enjoy learning, Enjoy Vert.x tutorials..!!