當你呼叫 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