Quarkus - Unleash
Unleash is a feature toggle system, that gives you a great overview of all feature toggles across all your applications and services. Quarkus Unleash extension is client for Unleash.
Installation
If you want to use this extension, you need to add the quarkiverse-unleash
extension first.
In your pom.xml
file, add:
<dependency>
<groupId>io.quarkiverse.unleash</groupId>
<artifactId>quarkus-unleash</artifactId>
<version>0.9.0</version>
</dependency>
Usage
Unleash client
Assuming you have Unleash
running on localhost:4242 you should add the following properties to your application.properties and fill in the values for url.
quarkus.unleash.url=http://localhost:4242/api
Once you have configured the properties, you can start using an Unleash-client.
@ApplicationScoped
public class TestService {
@Inject
Unleash unleash;
public boolean isTest() {
return unleash.isEnabled("quarkus.unleash.test");
}
}
@FeatureToggle
By using the @FeatureToggle
annotation there is a shortcut to inject feature toggle.
@ApplicationScoped
public class TestService {
@FeatureToggle(name = "my-toggle")
Instance<Boolean> myToggle;
@FeatureToggle(name = "my-toggle", defaultValue = true)
Instance<Boolean> myToggleDefault;
}
@FeatureVariant
By using the @FeatureVariant
annotation there is a shortcut to inject feature toggle
variant or the payload of the variant.
@ApplicationScoped
public class TestService {
@FeatureVariant(name = "toggle-variant")
Instance<Variant> variant;
@FeatureVariant(name = "toggle-payload")
Instance<String> variant;
@FeatureVariant(name = "toggle-variant-json")
Instance<MyCustomJsonModel> variant;
}
Testing
To use the test extension, add this dependency to the project:
<dependency>
<groupId>io.quarkiverse.unleash</groupId>
<artifactId>quarkus-unleash-test</artifactId>
<version>0.9.0</version>
<scope>test</scope>
</dependency>
UnleashTestResource
creates an instance of admin and standard Unleash
clients just for testing.
These instances are separate from the application instances.
@QuarkusTest
@QuarkusTestResource(UnleashTestResource.class)
public class BaseTest {
@InjectUnleashAdmin
UnleashAdmin admin;
@InjectUnleash
Unleash client;
@Test
public void test() {
admin.toggleOff("toggle-1");
admin.toggleOn("toggle-2");
// wait for client change
await().atLeast(12, SECONDS)
.pollInterval(4, SECONDS)
.until(() -> client.isEnabled("toggle-2"));
boolean toggleOn = client.isEnabled("toggle-2");
// ... test my application
}
}
Dev-Services
Dev Services for Unleash is automatically enabled unless:
-
quarkus.unleash.devservices.enabled
is set to false -
quarkus.unleash.url
is configured
Dev Service for Unleash relies on Docker to start the broker. If your environment does not support Docker, you will need
to start the broker manually, or connect to an already running broker. You can configure the broker address using
quarkus.unleash.url
.
Extension Configuration Reference
Configuration property fixed at build time - All other configuration properties are overridable at runtime
Type |
Default |
|
---|---|---|
If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running. Environment variable: |
boolean |
|
Optional fixed port the dev service will listen to. If not defined, the port will be chosen randomly. Environment variable: |
int |
|
Indicates if the Unleash server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Unleash starts a new container.
The discovery uses the Environment variable: |
boolean |
|
The value of the Environment variable: |
string |
|
The container image name to use, for container based DevServices providers. Environment variable: |
string |
|
Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass Environment variable: |
boolean |
|
The import data from file during the start. Environment variable: |
string |
|
The container image name to use, for container based zeebe simple monitor. Environment variable: |
string |
|
The value of the Environment variable: |
string |
|
Unleash URL service endpoint Environment variable: |
string |
required |
Application name Environment variable: |
string |
|
Project name Environment variable: |
string |
|
Instance ID. Environment variable: |
string |
|
Disable Unleash metrics Environment variable: |
boolean |
|
Application Unleash token Environment variable: |
string |
|
Application environment Environment variable: |
string |
|
Fetch toggles interval Environment variable: |
long |
|
Send metrics interval Environment variable: |
long |
|
Backup file Environment variable: |
string |
|
A synchronous fetch on initialisation Environment variable: |
boolean |
|
Enable proxy authentication by JVM properties Environment variable: |
boolean |
|