This repository provides a reusable gRPC-based Inbox delivery service and configuration client and a complementary application for Spine-based apps.
Delivery Server is an application that is deployed on a separate from the main
application server, and serves as a remote ShardedWorkRegistry and Inbox storage.
Delivery Server communicates with the main application nodes through the gRPC protocol.
This functionality is provided by the server application.
For more detailed information about the server's implementation please refer to the server readme file.
This repository contains several runnable applications:
-
server — the Delivery Server application itself. It serves the shard registry and the
Inboxstorage to the nodes of a Spine-based application. Implemented as a plain gRPC server — without Spine inside — with in-memory, Redis, or Hazelcast storage. See the module documentation for the exposed ports, storage modes, and other configuration options. -
admin-server — the maintenance and administration tool for running Delivery Server instances, showing the status of their shards. It obtains the status information by connecting to a Delivery Server as a gRPC client, and serves it over HTTP.
-
deployment / cloud-run — the application that starts the server inside a Docker container. The Launcher is responsible for starting the Delivery Server.
The server is distributed as a Docker image hosted on the public Google Artifact
Registry:
docker pull europe-docker.pkg.dev/spine-event-engine/containers/delivery-server:latestEvery push to master publishes a new image for amd64 and arm64, tagged latest, v<version>,
and the commit SHA, full and short. There is a Terraform module that automates
the deployment of the containers to the GCE instance. All the configuration parameters that
are available for the servers also may be set through the Terraform module configuration.
The libraries are published as Maven artifacts under the io.spine.delivery group. They are
served from the Spine Maven repository, which needs no credentials to read:
repositories {
maven("https://europe-maven.pkg.dev/spine-event-engine/releases")
}
dependencies {
// The client talking to a running Delivery Server over gRPC.
implementation("io.spine.delivery:spine-delivery-client:$version")
// The interfaces the client is built upon.
implementation("io.spine.delivery:spine-delivery-client-base:$version")
// The Protobuf domain model shared by the server and the clients.
implementation("io.spine.delivery:spine-delivery-model:$version")
// The Delivery Server itself, for launching it from an application.
implementation("io.spine.delivery:spine-delivery-server:$version")
}The exact version to use is the one listed in version.gradle.kts.