Bereiten Sie beispielsweise, wie unten gezeigt, eine boolesche Variable mit dem Namen "useNewAlgorithm" vor, um einen neuen Algorithmus zu verwenden, und verwenden Sie sie in Situationen, in denen der neue Algorithmus und der alte Algorithmus gemäß dem Richtig / Falsch von "useNewAlgorithm" ordnungsgemäß verwendet werden.
function reticulateSplines(){
var useNewAlgorithm = false;
// useNewAlgorithm = true; // UNCOMMENT IF YOU ARE WORKING ON THE NEW SR ALGORITHM
if( useNewAlgorithm ){
return enhancedSplineReticulation();
}else{
return oldFashionedSplineReticulation();
}
}
function oldFashionedSplineReticulation(){
// current implementation lives here
}
function enhancedSplineReticulation(){
// TODO: implement better SR algorithm
}
Das Feature-Flag wird häufig verwendet, wenn neue Features mit festem Release-Timing, kanarischen Releases, A / B-Tests usw. bereitgestellt werden.
FF4J
https://ff4j.github.io/
FF4j ist eine Java-Bibliothek, die Feature Toggle leicht realisieren kann.
--Real-Time Schalten Sie die Umschaltung mithilfe der Webkonsole und der REST-API um
Verschiedene Funktionen wie sind vorgesehen.
Erstellen Sie ein Projekt, indem Sie nur Spring Reactive Web, lombok aus Spring Initializr auswählen, das jeder liebt.
Fügen Sie pom.xml eine Abhängigkeit hinzu.
pom.xml
<dependency>
<groupId>org.ff4j</groupId>
<artifactId>ff4j-spring-boot-starter</artifactId>
<version>1.8</version>
</dependency>
Erstellen Sie eine Bean-Definition und ein Feature für FF4j
.
FF4JConfiguration.java
import org.ff4j.FF4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FF4JConfiguration {
@Bean
public FF4j ff4j() {
FF4j ff4j = new FF4j()
.createFeature(awesomeFeature())
.createFeature(greatFeature())
.createFeature(excellentFeature());
return ff4j;
}
private Feature awesomeFeature() {
return new Feature("AwesomeFeature", true);
}
private Feature greatFeature() {
return new Feature("GreatFeature", false);
}
private Feature excellentFeature() {
return new Feature("ExcellentFeature", false);
}
}
Dieses Mal haben wir drei Funktionen definiert: "AwesomeFeature", "GreatFeature" und "ExcellentFeature" und nur "AwesomeFeature" aktiviert.
Implementieren Sie den Controller mit FF4j. Wenn in dem Controller, der nur eine einfache Nachricht zurückgibt, die drei definierten Funktionen aktiviert sind, wird sie der Nachricht entsprechend den Funktionen hinzugefügt.
GreetingController.java
@RestController
@RequiredArgsConstructor
public class GreetingController {
//Konstruktorinjektion
private final FF4j ff4j;
@GetMapping
public String greeting() {
List<String> features = new ArrayList<>();
addFeatures(features);
String greeting = String.format("Hello, %s World!!", String.join(" ", features));
return greeting;
}
//Verarbeitung jedes Features
private void addFeatures(List<String> features) {
if(ff4j.check("AwesomeFeature")) {
features.add("Awesome");
}
if(ff4j.check("GreatFeature")) {
features.add("Great");
}
if(ff4j.check("ExcellentFeature")) {
features.add("Excellent");
}
}
}
Starten Sie die Anwendung und gehen Sie zu http: // localhost: 8080.
Standardmäßig ist "AwesomeFeature" aktiviert, daher wird die Nachricht als "Hallo, Awesome World!" Angezeigt.
Als nächstes werden wir die Verwaltungskonsole von FF4j vorstellen. Im vorherigen Status war es erforderlich, Feature im Quellcode ein- / auszuschalten. Mit WebConsole ist es jedoch möglich, Feature ein- und auszuschalten, während die Anwendung ausgeführt wird.
Fügen Sie pom.xml eine Abhängigkeit hinzu.
<dependency>
<groupId>org.ff4j</groupId>
<artifactId>ff4j-web</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
Fügen Sie eine neue Bean-Definition hinzu.
@Configuration
@ConditionalOnClass({ConsoleServlet.class, FF4jDispatcherServlet.class})
@AutoConfigureAfter(FF4JConfiguration.class)
public class FF4JWebConfiguration extends SpringBootServletInitializer {
@Bean
public ServletRegistrationBean<FF4jDispatcherServlet> ff4jDispatcherServletRegistrationBean(FF4jDispatcherServlet ff4jDispatcherServlet)
{
ServletRegistrationBean<FF4jDispatcherServlet> bean = new ServletRegistrationBean<>(ff4jDispatcherServlet, "/ff4j-web-console/*");
bean.setName("ff4j-console");
bean.setLoadOnStartup(1);
return bean;
}
@Bean
@ConditionalOnMissingBean
public FF4jDispatcherServlet getFF4jDispatcherServlet(FF4j ff4j) {
FF4jDispatcherServlet ff4jDispatcherServlet = new FF4jDispatcherServlet();
ff4jDispatcherServlet.setFf4j(ff4j);
return ff4jDispatcherServlet;
}
}
Starten Sie http: // localhost: 8080 / ff4j-web-console und greifen Sie darauf zu.
Sie können die aktuell definierten Funktionen im Menü "Funktionen" überprüfen. Die Funktion wird beim Ein- und Ausschalten des Schalters ein- und ausgeschaltet.
Ich werde auch eine Demo der oben erläuterten Inhalte veröffentlichen, die mit GIF-Animationen aufgenommen wurden. Als Referenz.
Ich gab eine kurze Einführung in FF4j. Feature Toggle ist eine leistungsstarke Technik. Wenn Sie jedoch keine Operationsrichtlinie festlegen, wird eine chaotische Codebasis erstellt. Daher möchte ich beim Betrieb vorsichtig sein. Es ist ein Rahmen erforderlich, z. B. das Trennen der DI-Merkmale für jedes Profil und das Definieren von Codierungsstandards und Überprüfungspunkten.
martinFowler.com - FeatureToggle: https://martinfowler.com/articles/feature-toggles.html FF4j: https://ff4j.github.io/ Diesmal verwendetes Repository: https://github.com/IshinFUKUOKA/ff4j-demo
Recommended Posts