0. Introduccion
Conceptos Previos
-
Flag: Es un valor variable y gestionado en una plataforma remota. Nuestra aplicación la consultará para saber que comportamiento realizar en cada ejecución. Aunque su tipo generalmente usado es Boolean (true/false) tambien puede tener un valor numerico o de cadena de texto.
-
Context: El valor de una flag es calculado en base a un contexto de ejecución. Es decir una flag llamada “applyDiscount” puede tener un valor true para un usuario A, pero para un usuario B tener un valor false. La información del usuario que hace la compra es lo que llamamos contexto. Las invocaciones al servicio LaunchDarkly deben informar del contexto de ejecución.
-
Segmento: Son el conjunto de reglas que analizarán el contexto de ejecución y en base a ello devolvera un valor u otro para una misma flag.
1. Instalacion
Si se quiere conectar a LaunchDarkly a traves del LD-Relay puedes usar este ejemplo de Dockerfile
1.1 Maven dependency
Añadir la dependencia
<dependency>
<groupId>com.launchdarkly</groupId>
<artifactId>launchdarkly-java-server-sdk</artifactId>
<version>7.0.0</version>
</dependency>
Inicializarlo
Uso basico:
LDContext context = LDContext.builder("context-key-123abc")
.name("Sandy")
.build();
boolean flagValue = client.boolVariation("flag-key-123abc", context, false);
if (flagValue) {
// Application code to show the feature
}
else {
// The code to run if the feature is off
}
2. Usando LaunchDarkly Relay
version: '3.7'
networks:
featureflags-demo-network:
name: feature-flags-demo-network
services:
ld-relay:
image: launchdarkly/ld-relay
environment:
STREAM_URI: https://stream.eu.launchdarkly.com
BASE_URI: https://sdk.eu.launchdarkly.com
EVENTS_HOST: https://events.eu.launchdarkly.com
LD_ENV_test: ${APIkey_for_test_env}
LD_ENV_itg: ${APIkey_for_itg_env}
LD_ENV_prod: ${APIkey_for_prod_env}
USE_EVENTS: "true"
ports:
- "8030:8030"
networks:
- featureflags-demo-network
3. LaunchDarkly SaaS
3.1 FLAGS
Vamos a crear la flag is-car-winner, vamos a la seccion Flags o pulsamos el boton Create
Elegimos el fiendlyName y la key que tendra la flag is-car-winner
Pulsamos en Create Flag y nos lleva a la vista general de la Flag donde indica que para todo el trafico esta sirviendo el valor False, ya que no esta activada:
3.2 SEGMENTOS
Vamos a crear un segmento, que es un conjunto de reglas que rigen cual es el valor de la flag para cada ejecucion.
Vamos a la seccion Segments y pulsamos en Create Segment. En el wizard tenemos 2 opciones de crear Segmentos:
3.2.1 List-Based Segments
Es la configuracion mas sencilla ya que unicamente crea una regla en la que comprueba que el key del contexto tenga un valor que este dentro de la lista.
Creamos el segmento
Por defecto ya nos ha creado una regla que se configura con includedkeys y excludedKeys.
Vamos a añadir el nombre de contexto demotest-feature-flag-app a los incluidos, incluyendolo en la caja de texto y pulsando en Add :
Pulsamos en Save.
Asociamos el Segmento a la Flag
En la parte de arriba vemos la advertencia
Pulsamos en Target this segment y seleccionamos la flag de la lista
Pulsamos en Target para guardar los cambios.
En la pantalla resumen de la flag podemos ver un diagrama de trafico que nos indica que como la flag no esta activada, no se evaluaran los segmentos ni reglas
Vamos a activar la flag seteandola a On, al activarla recupera la regla que creamos en la segmentacion y nos pide que indiquemos cual el valor de la flag si al evaluar el contexto contra el segmento es favorable. Le indicamos que para ese caso devuelva true y modificamos la Default rule para que sirva por defecto Off, de esta manera la flag solo devolvera true para los contextos que esten en el segmento que hemos creado.
Pulsamos en Review and Save ya tendriamos la flag activada y segmentada.
3.2.2 Rule Based
Vamos a crear otra regla is-bicycle-winner
Esta segmentacion nos da un grado mas fino para las validaciones. Este enfoque esta basado en los contextValues que mandamos. Puede tener varias rules sobre distintos valores de un contexto para ejecutarse.
Creamos una nueva rule y elegimos Rule-Based en el wizard
Vamos a crea un segmento basado en 2 reglas: - la edad de la persona, en base a si es mayor o no a 18 años - el nombre de la persona empieza por “D”.
Nos quedará así:
Activamos la flag y setemos la Default Rule a false y la Rule 1 a true condicionada al segmento users-age-and-letter-match