Skip to content

Vert.x 5

Julien Viet edited this page Feb 22, 2023 · 21 revisions

Development of Vert.x 5

Intro

Vert.x 4 was released two years ago (december 2020) and brought key features such as a future based programming model, microservices monitoring, a fully non-blocking and high performance SQL client, a redesigned Redis client to name a few. Since its release, new features were gradually added to the stack.

Reactive stacks have been recognised as strategic when it comes to performance, resource efficiency and scalability, they are continuing to evolve. External factors influencing the design of Vert.x are well known: virtual thread support (for which Vert.x has an incubator project) and Netty 5 (for which we did a small prototype) are the most impacting ones.

After two years and a few minor versions, it is time to deliver a new major Vert.x version. We think that it is too early to commit to virtual threads or Netty 5. Instead we want Vert.x 5 to revise and improve some of its parts, while at the same time preparing Netty 5 and virtual threads.

Disclaimer

  • This document is not a roadmap, rather a description of what Vert.x 5 shall be and not be
  • This document targets Vert.x 5 (i.e 5.x releases)

Major changes

Supported Java versions

We will recommend using the latest Java LTS version and support Java 11 as minimum Java version.

Netty 5

The Vert.x public API is coupled to Netty 4, by a small degree yet it is. This coupling will be removed from the public API providing the opportunity to provide an alternative implementation of Vert.x 5 based on Netty 5 during the lifetime of Vert.x 5.

SQL Client

SQL client is mature, no major changes happening, a few enhancements

  • TestContainer integration usability
  • Improvement of the query API that does not allow to chain mapper/collector
  • Prepared query builder to help building SQL query parameter placeholder syntax

Codegen

  • Permitted types is the new default
  • Async handler support removal
  • Buffer might become a data object instead of being a generated type

gRPC

Vert.x 4 has developed a new gRPC stack based on Vert.x HTTP/2 stack, the existing gRPC stack (based on Netty 4) becomes legacy and goes away in Vert.x 5.

gRPC Web

Support for grpc-web without the need of a sidecar proxy.

gRPC powered service proxies

Addresses a few concerns

  • Using service proxies with EventBus serialization when exposing gRPC services requires transcoding Protobuf to JSON
  • Provides an alternative to EventBus to use with service proxies

The implementation can be achieved in several steps

  1. Code generated Protobuf codec: a service proxy/handler implementation can serialize/deserialize to/from Protobuf.
  2. Transport switch: Vert.x gRPC client and server
  3. Protofile generation: generate a Protofile from the service proxy interfaces (services and messages).

ReactiveX

  • Drop RxJava support
  • Despite RxJava 3,the use RxJava 2 is still dominant
  • Prune callback support

Vert.x Web

Clone this wiki locally