Apple have open-sourced ServiceTalk, a JVM network application framework that provides a common and extensible networking abstraction built on top of Netty. ServiceTalk was conceived to improve low-level abstractions provided by Netty such as threading and usability. ServiceTalk provides higher-level, more targeted APIs for commonly used protocols such as HTTP/1.x, HTTP/2.0, and gRPC with a consistent networking stack and feature set that include client-side load balancing and service discovery integration.
ServiceTalk was designed to support different programming paradigms based upon Reactive Streams, including various blocking patterns, and has particularly strong utilities to cross the synchronous and asynchronous API boundary. This allows developers to defer the complexity of asynchronous control flow where it is not currently required within the application. Native implementations of Reactive Streams operators focus on limiting memory consumption, cross cutting features, such as
AsyncContext and blocking safe-by-default, and exploiting concurrency rules in Reactive Streams specification to optimize for server-side use cases.
The goal of open-sourcing ServiceTalk was to provide building blocks that would enable contributions from the Java community. With Apple’s pre-established relationships in the Java community, they hope to foster a similar community with ServiceTalk. Apple told InfoQ that in the short time ServiceTalk has been open-sourced, there has been growing interest from initiatives such as Project Reactor, Micronaut, RxJava, gRPC, and Vert.x.
Apple also told InfoQ that a number of opportunities exist for the Java community to contribute to ServiceTalk in the areas of: integrations with Spring Boot, Micronaut and Project Reactor; enhancements to existing and new protocols; integrations with service discovery via the pluggable
ServiceDiscoverer API; implement the new reactive streams operator; and on-going work in the client-side load balancing domain.
Developers can get started with ServiceTalk by studying the HTTP and gRPC examples for asynchronous and blocking environments.