使用記憶體 Blob 的 Javascript Azure 事件中樞 檢查點存放區連結庫
從 @azure/事件中樞連結庫使用EventHubConsumerClient
時,用來儲存檢查點和協助負載平衡的 Azure Blob 記憶體型解決方案
| 原始程式碼套件 (npm) | API 參考檔 | 樣品
開始使用
安裝套件
使用 npm 安裝 Azure 事件中樞 檢查點存放區 Blob 連結庫
npm install @azure/eventhubs-checkpointstore-blob
必要條件:您必須擁有 Azure 訂用帳戶、 事件中樞命名空間 才能使用此套件,以及 記憶體帳戶
如果您在 Node.js 應用程式中使用此套件,請使用 Node.js 8.x 或更高版本。
設定 Typescript
TypeScript 用戶必須安裝節點類型定義:
npm install @types/node
您也需要在 tsconfig.json 中啟用 compilerOptions.allowSyntheticDefaultImports
。 請注意,如果您已啟用 compilerOptions.esModuleInterop
, allowSyntheticDefaultImports
預設會啟用 。 如需詳細資訊,請參閱 TypeScript 的編譯程式選項手冊 。
重要概念
縮放:建立多個取用者,而每個取用者都會負責從幾個事件中樞分割區讀取資料。
負載平衡: 支援負載平衡的應用程式包含一或多個實例,這些實例
EventHubConsumerClient
已設定為從相同的事件中樞和取用者群組和相同的CheckpointStore
取用者群組取用事件。 它們會藉由散發要自行處理的分割區,來平衡不同實例的工作負載。檢查點: 這是讀取器標記或認可其數據分割事件序列中位置的程式。 設立檢查點是取用者的責任,這項作業會在取用者群組內依照資料分割來進行。 此責任表示在每個取用者群組內,每個資料分割讀取器必須追蹤自己目前在事件串流中的位置,而當它們認為資料串流完成時,可以通知服務。
如果讀取器與資料分割中斷連線,當它重新連線時,會從該取用者群組中該資料分割最後一個讀取器先前提交的檢查點開始讀取。 當讀取器連線時,它會將此位移傳遞給事件中樞,以指定要開始讀取的位置。 如此一來,檢查點能成為下游應用程式標記事件「完成」的方法,也能針對在不同機器上執行的讀取器提供容錯移轉發生時的恢復功能。 從這個檢查點處理程序中指定較低的位移,即可回到較舊的資料。 透過這項機制,檢查點可提供容錯移轉彈性,並支援事件串流重播。
BlobCheckpointStore 是一種類別,可實作 EventHubConsumerClient 用來平衡負載和更新檢查點所需的索引鍵方法。
範例
CheckpointStore
使用 Azure Blob 儲存體 建立
使用下列代碼段來建立 CheckpointStore
。 您必須將 連接字串 提供給記憶體帳戶。
import { ContainerClient } from "@azure/storage-blob",
import { BlobCheckpointStore } from "@azure/eventhubs-checkpointstore-blob"
const containerClient = new ContainerClient("storage-connection-string", "container-name");
if (!containerClient.exists()) {
await containerClient.create(); // This can be skipped if the container already exists
}
const checkpointStore = new BlobCheckpointStore(containerClient);
使用 Azure Blob 記憶體的檢查點事件
若要使用 Azure Blob 儲存體 接收的檢查點事件,您必須傳遞與 SubscriptionEventHandlers 介面相容的物件,以及呼叫 updateCheckpoint()
方法的程式代碼。
在此範例中, SubscriptionHandlers
會實作 SubscriptionEventHandlers ,同時處理檢查點。
import { ContainerClient } from "@azure/storage-blob";
import { BlobCheckpointStore } from "@azure/eventhubs-checkpointstore-blob";
import { EventHubConsumerClient } from "@azure/event-hubs";
const consumerGroup = "consumer-group-name";
const connectionString = "event-hub-connectionstring";
const containerClient = new ContainerClient("storage-connection-string", "container-name");
if (!(await containerClient.exists())) {
await containerClient.create(); // This can be skipped if the container already exists
}
const checkpointStore = new BlobCheckpointStore(containerClient);
class SubscriptionHandlers {
async processEvents(event, context) {
// custom logic for processing events goes here
// Checkpointing will allow your service to restart and pick
// up from where it left off.
//
// You'll want to balance how often you checkpoint with the
// performance of your underlying checkpoint store.
await context.updateCheckpoint(event);
}
async processError(err, context) {
// handle any errors that occur during the course of
// this subscription
console.log(`Errors in subscription: ${err}`);
}
}
const consumerClient = new EventHubConsumerClient(consumerGroup, connectionString, checkpointStore);
const subscription = consumerClient.subscribe(new SubscriptionHandlers());
// events will now flow into the handlers defined above
// to stop the subscription:
subscription.close();
疑難排解
啟用記錄
您可以將環境變數設定 AZURE_LOG_LEVEL
為下列其中一個值,以啟用記錄至 stderr
:
- verbose
- info
- warning
- error
您也可以匯入 @azure/記錄器 套件,並使用其中一個記錄層級值呼叫 setLogLevel
函式,以程序設計方式設定記錄層級。
以程式設計方式或透過 AZURE_LOG_LEVEL
環境變數設定記錄層級時,使用等於或小於您選擇的記錄層級所寫入的任何記錄都會發出。
例如,當您將記錄層級設定為 info
時,也會發出針對層級warning
error
和 寫入的記錄。
此 SDK 會遵循 Azure SDK for TypeScript 指導方針 來判斷要登入的層級。
您也可以設定 DEBUG
環境變數,以在使用這個連結庫時取得記錄。
如果您也想要從相依性 rhea-promise
發出記錄, rhea
這也很有用。
注意: 如果設定,AZURE_LOG_LEVEL優先順序高於 DEBUG。
當同時指定AZURE_LOG_LEVEL或呼叫 setLogLevel 時,請勿透過 DEBUG 指定任何 azure
連結庫。
使用此程式庫時,您可以設定下列環境變數來取得偵錯記錄。
- 只從 Eventhubs Checkpointstore Blob 取得資訊層級偵錯記錄。
export DEBUG=azure:eventhubs-checkpointstore-blob:info
記錄至檔案
如上所示啟用記錄,然後執行測試腳本,如下所示:
從測試文稿的記錄語句會移至
out.log
,然後從 sdk 記錄語句移至debug.log
。node your-test-script.js > out.log 2>debug.log
從測試腳本和 sdk 記錄語句移至相同的檔案
out.log
,方法是將 stderr 重新導向至 stdout (&1) ,然後將 stdout 重新導向至檔案:node your-test-script.js >out.log 2>&1
來自測試腳本和 sdk 的記錄語句會移至相同的檔案
out.log
。node your-test-script.js &> out.log
後續步驟
如需詳細範例,請參閱 範例 目錄。
參與
如果您希望向此程式庫投稿,請參閱投稿指南,深入瞭解如何組建與測試程式碼。