當你呼叫 Action 或送出事件時, Broker 會建立一個包含所有請求資訊的 Context 實例,然後將資訊透過 ctx 參數傳遞給 Action 或事件處理器。
| 名稱 | 類型 | 說明 | 
|---|---|---|
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> | 當前活動範圍 | 
| 名稱 | 類型 | 說明 | 
|---|---|---|
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 副本 (淺拷貝) | 
如果想要優雅的關閉服務,可以啟動 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