使用 Unleash 在 Java 中實現功能標誌
1. 概述
在當今快節奏的軟體開發環境中,動態功能管理至關重要。
功能標誌,通常稱為功能切換,允許我們啟用和停用功能而無需發布額外的程式碼。本文將向我們展示如何使用開源功能管理工具Unleash在 Java 中新增功能標誌。
我們將回顧功能標誌的基礎知識,包括如何使用 Unleash 配置它們、將它們整合到 Java 應用程式中,以及如何確保我們的功能切換正常運作。
2. 理解功能開關以及使用它們的原因
功能標誌允許應用程式開發人員在運行時更改程式的功能,而無需重新部署程式碼。使用功能標誌,我們可以透過設定位於應用程式程式碼之外的功能切換的值來啟用/停用程式碼中的某些功能(例如在設定檔、資料庫或像 Unleash 這樣的功能管理系統中)。
兩個主要優點是:
- 更快的開發週期:功能標誌就像開關一樣,允許我們無需重新部署程式碼即可開啟或關閉功能。這加速了新功能的測試和交付。
- 有限的推出測試:功能標誌可透過 A/B 測試和金絲雀部署控制新功能的測試。
3. Unleash 簡介
Unleash**是一款開源功能管理應用程序,可讓使用者在功能之間切換。**它提供了一個跨多個環境管理功能標誌的有效框架。 Unleash 提供了多種管理功能發布的方法,使其適合小型團隊和大型公司。以下是 Unleash 的主要功能:
- 靈活性:支援根據特定需求自訂功能切換技術。
- 可擴展性:管理跨多個環境和應用程式的功能標誌。
- 開源:社群驅動,積極開發與支持。
Unleash 在客戶端-伺服器架構上運作。 Unleash 伺服器可作為功能標誌配置的集中儲存庫。應用程式與伺服器通訊以取得標誌狀態並根據預先定義的策略決定啟用哪些功能。
4. 設定 Unleash
要設定 Unleash,我們首先了解安裝步驟,然後學習如何設定簡單的功能切換。
4.1.安裝
讓我們逐步介紹 Unleash 的安裝、設定本機實例、登入和新增功能標誌。
要開始使用 Unleash,首先我們需要設定一個 Unleash 伺服器並確保我們的機器上安裝了 Docker 和 Git。我們可以使用 Docker 在本地運行 Unleash 或將其部署在雲端。以下是使用 Docker 進行本機設定的快速指南。
首先,讓我們使用 Git 克隆 Unleash 儲存庫並使用 Docker 建置和運行它。我們將打開一個終端機視窗並執行以下命令:
git clone https://github.com/Unleash/unleash.git
cd unleash
docker compose up -d
我們現在將在我們的機器上安裝 Unleash 並在背景運行。 我們可以透過 Web 瀏覽器存取此實例http://localhost:4242
並使用下列命令登入:
Username: admin
Password: unleash4all
4.2.設定
一旦登錄,我們就可以看到下面的儀表板。在這裡,我們從左側邊欄中選擇“ Projects
”來建立或選擇項目以及該項目下的功能標誌:
對於本文,我們將使用預設項目,因此我們按一下「 Default
」項目:
接下來,我們將透過點擊'New feature flag
」來建立一個功能標誌,並將其命名為「 testDemoFeatureFlag
」。我們將在其餘功能標誌表單中使用預設值:
我們已經創建了新的功能標誌,現在可以使用了。我們需要啟用此標誌才能在我們的開發環境中使用。這使得它可以在本地環境中的我們的應用程式中存取:
接下來,我們需要產生一個 API 令牌來驗證從我們的專案對 Unleash 伺服器發出的呼叫。我們的應用程式最終將引入此 API 令牌來切換功能。我們需要此 API 令牌作為標誌配置的一部分,以確保只有具有正確身份驗證的應用程式才能存取 Unleash 中的功能標誌。
從左側邊欄中,我們展開“ Admin
”部分,選擇“ API access
”,然後按一下“ New API token
”按鈕:
我們命名 API 令牌並選擇「 Server-side SDK(CLIENT)
」類型,因為我們將使用 Java SDK 在伺服器端進行標誌評估。此令牌應該有權存取“ development
”環境:
5.在 Java 中使用 Unleash
在這裡,我們使用帶有 Maven 建置工具的 Spring Boot 應用程式來下載和安裝相依性。在pom.xml
檔案中,我們新增Unleash 用戶端依賴項:
<dependency>
<groupId>io.getunleash</groupId>
<artifactId>unleash-client-java</artifactId>
<version>9.2.6</version>
</dependency>
接下來,我們使用 Unleash 建構器來設定 Unleash 用戶端:
UnleashConfig config = UnleashConfig.builder()
.appName("appName")
.instanceId("instanceId")
.unleashAPI("http://localhost:4242/api/")
.apiKey("apiToken")
.build();
Unleash unleash = new DefaultUnleash(config);
為了確保我們在應用程式啟動時連接到 Unleash 伺服器,我們可以在應用程式的主函數中或應用程式初始化期間調用的任何其他地方添加上述程式碼。
讓我們來看看創建UnleashConfig
物件所使用的關鍵元件:
-
**appName**
是我們應用程式的名稱。它有助於識別哪個應用程式正在使用功能標誌,這在管理同一個 Unleash 伺服器上的應用程式時特別有用。 -
**instanceId**
是我們應用程式實例的識別碼。它有助於追蹤和記錄每個實例的功能標誌使用情況。 **unleashAPI**
是 Unleash 伺服器 API 的 URL。它告訴客戶端從哪裡獲取功能標誌配置。在我們的本地設定中,這將是http://localhost:4242/api/.
Unleash 用戶端物件使用此配置進行初始化,從而允許我們的應用程式連接並有效地管理功能標誌。我們可以在他們的官方文件中獲得有關配置選項和API 令牌的更多資訊。
6. 驗證功能切換體驗
在本機 Unleash 伺服器和我們的 Java 應用程式上設定功能標誌後,我們可以驗證我們的標誌是否啟用,並且我們的 Java 程式是否正在讀取標誌的狀態。
以下是Java程式碼的實作:
public static void main(String[] args) throws InterruptedException {
String appName = "unleash-onboarding-java";
String appInstanceID ="unleash-onboarding-instance";
String appServerUrl = "http://localhost:4242/api/";
String appToken = "<AddYourApiTokenHere>";
SpringApplication.run(DemoApplication.class, args);
UnleashConfig config = UnleashConfig.builder()
.appName(appName)
.instanceId(appInstanceID)
.unleashAPI(appServerUrl)
.apiKey(appToken)
.build();
Unleash unleash = new DefaultUnleash(config);
while(true) {
if(unleash.isEnabled("testDemoFeatureFlag")) {
log.info("New feature is enabled!");
} else {
log.info("New feature is disabled!");
}
Thread.sleep(1000);
}
}
打開標誌切換後,我們應該會看到對應的狀態,如下圖所示:
我們可以使用 Unleash 關閉標誌並在控制台輸出中查看更新的狀態。在 Unleash 儀表板中,我們在development
環境中停用testFeatureFlag
:
幾秒鐘後,我們的應用程式會更新以反映最新的標誌狀態,它看起來像控制台中的輸出變化:
7. 結論
本文提供了使用 Unleash 理解、實現和測試功能標誌的深入指南。我們可以有效地管理功能標誌並以最小的風險動態地推出變更。
與往常一樣,這些範例的程式碼可以在 GitHub 上找到。