Centralized live configuration library for Java. for microservice or distributed system. Inspired from https://github.com/cfg4j/cfg4j
- gRPC connection
- Wrapped by grpc protocol (fast and high performance RPC framework) for requesting configuration to config server.
- Hystrix
- Bundled with hystrix for circuit breaker. avoid cascading failures
- In-Memory cache
- Avoid too many requests to config server
- Google Guava cache
- HTTP connection
- Http rest api connection
syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.sayurbox.config4live";
option java_outer_classname = "LiveConfigurationProto";
option objc_class_prefix = "HLW";
package config4live;
service LiveConfiguration {
// Find config by name
rpc FindConfig (ConfigRequest) returns (ConfigResponse) {}
}
message ConfigRequest {
string name = 1;
}
message ConfigResponse {
string id = 1;
string name = 2;
string value = 3;
string description = 4;
enum Format {
text = 0;
number = 1;
bool = 2;
json = 3;
}
Format format = 5;
string owner = 6;
}
Add the JitPack repository to your root build file
repositories {
maven { url 'https://jitpack.io' }
}
Add the dependency
dependencies {
implementation 'com.github.sayurbox:config4live-java:<release-version>'
}
Create source (grpc url is required, hystrx config is optional) and provider instance
ConfigurationSource source = new GrpcConfigurationSource.Builder()
.withGrpcUrl("localhost:5055")
.withCircuitBreakerEnabled(true)
.withExecutionTimeout(5000)
.withCircuitBreakerFailureVolumeThreshold(10)
.withCircuitBreakerWaitDurationOpenState(15)
.withCircuitBreakerSlowResponseThreshold(2000)
.build();
ConfigurationProvider provider = new ConfigurationProvider.Builder().withSource(source)
.withCache(true)
.withTimeToLive(10).build();
// find configuration with default value
String value = provider.bind("default_name", "Name default")
System.out.println("value " + value);
Create source (http url is required, hystrx config is optional) and provider instance
ConfigurationSource source = new HttpConfigurationSource.Builder()
.withUrl("http://localhost:8080")
.withCircuitBreakerEnabled(true)
.withExecutionTimeout(5000)
.withCircuitBreakerFailureVolumeThreshold(10)
.withCircuitBreakerWaitDurationOpenState(15)
.withCircuitBreakerSlowResponseThreshold(2000)
.build();
ConfigurationProvider provider = new ConfigurationProvider.Builder().withSource(source)
.withCache(true)
.withTimeToLive(10).build();
// find configuration with default value
String value = provider.bind("default_name", "Name default")
System.out.println("value " + value);