Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/truelayer/ginepro
A client-side gRPC channel implementation for tonic
https://github.com/truelayer/ginepro
grpc load-balancer tonic
Last synced: 6 days ago
JSON representation
A client-side gRPC channel implementation for tonic
- Host: GitHub
- URL: https://github.com/truelayer/ginepro
- Owner: TrueLayer
- License: apache-2.0
- Created: 2021-05-05T08:21:49.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-12-09T15:44:11.000Z (about 1 month ago)
- Last Synced: 2025-01-09T16:52:46.062Z (13 days ago)
- Topics: grpc, load-balancer, tonic
- Language: Rust
- Homepage:
- Size: 74.2 KB
- Stars: 127
- Watchers: 19
- Forks: 24
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE-APACHE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# ginepro
`ginepro` provides client-side gRPC load-balancing out of the box by enriching `tonic` ‘s channel with periodic service discovery.
[![Crates.io](https://img.shields.io/crates/v/ginepro.svg)](https://crates.io/crates/ginepro)
[![Docs.rs](https://docs.rs/ginepro/badge.svg)](https://docs.rs/ginepro)
[![CI](https://github.com/TrueLayer/ginepro/workflows/CI/badge.svg)](https://github.com/TrueLayer/ginepro/actions)
[![Coverage Status](https://coveralls.io/repos/github/TrueLayer/ginepro/badge.svg?branch=main&t=UWgSpm)](https://coveralls.io/github/TrueLayer/ginepro?branch=main)## Overview
`ginepro` enriches [tonic](https://github.com/hyperium/tonic) by periodically updating the list of
servers that are available through a `ServiceDiscovery` interface that currently is implemented for DNS.## How to install
Add `ginepro` to your dependencies
```
cargo add ginepro
```## Getting started
The interface remains fairly the same as we implement all the logic for a drop-in replacement for
tonic's `Channel`.```rust
// Using the `LoadBalancedChannel`.
use ginepro::LoadBalancedChannel;
use ginepro::pb::tester_client::TesterClient;// Build a load-balanced channel given a service name and a port.
let load_balanced_channel = LoadBalancedChannel::builder(
("my_hostname", 5000)
)
.channel()
.await
.expect("failed to construct LoadBalancedChannel");// Initialise a new gRPC client for the `Test` service
// using the load-balanced channel as transport
let grpc_client = TesterClient::new(load_balanced_channel);
```For more examples, have a look at the [examples](ginepro/examples) directory.
## License
Licensed under either of Apache License, Version
2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.