iT邦幫忙

2022 iThome 鐵人賽

DAY 5
1

Broker

昨天已經帶給大家 Moleculer 的核心概念,今天要介紹的是 Moleculer 的主要元件之一 Broker [1]。每個節點都需要建立一個 Broker 來運作,它可以處理服務、呼叫、發送事件並與遠端節點進行通訊。


Fig. 1. Broker 功能項

Broker 所提供的功能非常多,今天將著重於討論如何建立 ServiceBroker ,日後再來介紹每個子功能。

建立 ServiceBroker

這是一個基本 Broker 物件的建立方式,開發者可以在每個節點的 Broker 設置不同的客製化參數,也可以使用官方推薦的 Moleculer Runner 來替代,它能夠協助開發者更方便的管理與設置參數。

const { ServiceBroker } = require("moleculer");
const broker = new ServiceBroker({
    nodeID: "node-1",
    transporter: "nats://localhost:4222",
    logLevel: "debug",
    requestTimeout: 5 * 1000,
    metadata: {
        region: "eu-west1"
    }
});

參數說明:

  • nodeID 節點的名稱,必須是整個系統中唯一的。
  • transporter Transporter 的路徑,用來讓 Broker 與遠端節點溝通。
  • logLevel 日誌的級別,可以設定 fatalerrorwarninfodebugtrace ,細節將在後續章節說明。
  • requestTimeout 伺服器逾時設定。
  • metadata 用來儲存自定義的資料,可用於客製化中間件或客製化負載平衡策略。
    • metadata 可以呼叫 $node.list 來獲得
    • metadata 可以被轉送到其它節點

Ping

網路環境是複雜且動態的,難以保證連線品質及其有效性,為了確保在多個節點間的連線是否正常,我們可以透過 broker.ping 方法測試封包是否能達到指定或全部的遠端節點,它可以返回延遲時間、時間差資訊來判斷節點是否正常運作。

broker.ping([nodeID[, timeout]])

參數說明:

  • nodeID <String> | <String[]> 節點ID,可以指定單一字串、字串陣列,不填則輸出全部。
  • timeout <Number> 逾時時間(毫秒)。

單一節點請求範例:

broker.ping("node-123", 1000)
    .then(res => broker.logger.info(res));

輸出:

{
    nodeID: "node-123",
    elapsedTime: 16,
    timeDiff: -3
}

參數說明:

  • nodeID 節點 ID。
  • elapsedTime 總花費時間。
  • timeDiff 為系統時間差。

多節點請求範例:

broker.ping(["node-100", "node-102"])
    .then(res => broker.logger.info(res));

輸出:

{ 
    "node-100": {
        nodeID: "node-100",
        elapsedTime: 10,
        timeDiff: -2
    },
    "node-102": {
        nodeID: "node-102",
        elapsedTime: 250,
        timeDiff: 850
    }
}

全域錯誤處理

一套複雜的系統運作時難免遇到異常的錯誤,這時候可以使用 errorHandler 來處理全域通用的錯誤,它能協助捕獲 action 與 event 中未處理的錯誤。

const broker = new ServiceBroker({
    errorHandler(err, info) {
		// 捕獲錯誤
        this.logger.warn("Log the error:", err);
        // 拋出錯誤
		throw err;
    }
});

參數說明:

  • err 錯誤的物件內容
  • info 包含 Broker 與 服務實例,context、action 與 event 定義。

更多的參數配置

Moleculer 的 Broker 除了上述幾項常用的參數外,還有更多的參數供使用,可以參考 Configuration 說明文件來進行配置:

https://moleculer.services/docs/0.14/configuration.html

參考文獻

[1] Broker, https://moleculer.services/docs/0.14/broker.html

家家酒小劇場

  • Boxy - 小獺獺妳怎麼看起來好累。
  • Otter - 因為一個一個建立 Broker 好累人。
  • Boxy - 那妳可以試試看 Moleculer Runner ,可以由一個設定檔來管理所有的服務,也可以設置系統環境變數來套用,就不用一個一個配置參數了。
  • Otter - 好耶,那我要趕快來試試看^-^

上一篇
Day 4 : 核心概念
下一篇
Day 6 : Services
系列文
Moleculer 家家酒31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
json_liang
iT邦研究生 4 級 ‧ 2022-09-05 09:43:00

感謝大大分享 Broker 概念,這個概念真的很重要

我要留言

立即登入留言