iT邦幫忙

2022 iThome 鐵人賽

DAY 10
2

Context

當你呼叫 Action 或送出事件時, Broker 會建立一個包含所有請求資訊的 Context 實例,然後將資訊透過 ctx 參數傳遞給 Action 或事件處理器。

Context 屬性列表

名稱 類型 說明
ctx.id <String> Context ID
ctx.broker <ServiceBroker> Broker 服務實例
ctx.nodeID <String> 呼叫者或目標節點 ID
ctx.action <Object> Action 實例
ctx.event <Object> 事件實例
ctx.eventName <Object> 送出的事件名稱
ctx.eventType <String> 事件類型(一般事件或廣播事件)
ctx.eventGroups <String[]> 事件群組
ctx.caller <String> 呼叫者的服務名稱 例: v3.myService
ctx.requestID <String> 請求 ID (如果是巢狀呼叫則 ID 會是相同的)
ctx.parentID <String> 巢狀呼叫時的上層 ID
ctx.params <Any> 請求的參數
ctx.meta <Any> meta 資料
ctx.locals <Any> Local 資料
ctx.level <Number> 巢狀呼叫的請求級別 (第一層級是 1)
ctx.span <Span> 當前活動範圍

Context 方法

名稱 類型 說明
ctx.call() <Promise> 建立巢狀呼叫 (參數同 broker.call)
ctx.emit() <void> 送出事件 (同 broker.emit)
ctx.broadcast() <void> 送出廣播事件 (同 broker.broadcast)
ctx.startSpan(name, opts) <Span> 建立新的子範圍
ctx.finishSpan(span) <void> 結束範圍
ctx.toJSON() <Object> 將 Context 轉為 JSON 格式
ctx.copy() <this> 建立 Context 副本 (淺拷貝)

Context 追蹤

如果想要優雅的關閉服務,可以啟動 Broker 選項中的 Context tracking 功能。當它被啟動時,服務將會在關閉之前等待正在執行的 Context 。另外可以使用 shutdownTimeout 來限制等待逾時,預設為 5 秒。

範例:

const broker = new ServiceBroker({
    nodeID: "node-1",
    tracking: {
        enabled: true,
        shutdownTimeout: 10 * 1000
    }
});

範例:你也可以在呼叫函數單獨關閉追蹤功能。

await broker.call("posts.find", {}, { tracking: false });

參考文獻

[1] Context, https://moleculer.services/docs/0.14/context.html

家家酒小劇場

  • Otter - 這裡好像有一些在之前就有用到呢。
  • Boxy - 對阿,因為 Context 在 Broker 中是相當重要的功能唷。

上一篇
Day 9 : Events
下一篇
Day 11 : 生命週期
系列文
Moleculer 家家酒31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言