blob: 8a83573f8f86922c7a7fc0ea25429c7acd1a6cba [file] [log] [blame]
= Akka gRPC
include::partial$include.adoc[]
https://grpc.io[gRPC {tab-icon}, window="tab"] is a transport mechanism for request/response and streaming use cases. It can run in almost any environment with bindings to many programming languages. It takes a schema-first approach, where your protocol is declared in a https://doc.akka.io/docs/akka-grpc/current/proto.html[Protobuf service descriptor {tab-icon}, window="tab"]. From the service descriptor the source code for the messages, client and server stubs are generated.
It has several advantages:
* Schema-first design favors well-defined and decoupled service interfaces over brittle ad-hoc solutions.
* The Protobuf-based wire protocol is efficient, well-known, and allows compatible schema evolution.
* It is based on HTTP/2 which allows multiplexing several data streams over a single connection.
* Streaming requests and responses are first class.
* There are tools available for many languages allowing seamless interoperability between clients and services written in different languages.
That makes it well-suited for:
* Connections between internal services
* Connecting to external services that expose a gRPC API (even ones written in other languages)
* Serving data to web or mobile front-ends
{akka-grpc}/[Akka gRPC {tab-icon}, window="tab"] is a gRPC library for the Akka ecosystem. It has support for Maven, gradle and sbt. The gRPC servers and clients use xref:akka-stream.adoc[], Scala `Future` and Java `CompletionStage` in the user facing API.
== Learn more
* The {akka-blog}/news/2020/04/08/akka-grpc-intro-video[Introduction to Akka gRPC video {tab-icon}, window="tab"] is a good starting point for learning Akka gRPC.
* {akka-grpc}/whygrpc.html[Akka gRPC "Why gRPC?" {tab-icon}, window="tab"]
* {akka-grpc}/server/walkthrough.html[Akka gRPC server walk-through {tab-icon}, window="tab"]
* {akka-grpc}/client/walkthrough.html[Akka gRPC client walk-through {tab-icon}, window="tab"]