event_stream 功能可讓元件訂閱特定事件 在元件生命週期的不同階段發生。 這包括元件狀態變更的資訊 轉送。
如需支援的事件及其說明的完整清單,請參閱
fuchsia.component.EventType
參考說明文件。請參閱 RFC-121
針對 event_stream 功能,取得原始 RFC。
提供 event_stream 功能
event_stream 功能一律由元件管理員產生。這些
提供的元件個別元件無法宣告
事件 (capabilities
) 也無法用於 from:
"framework"
每個 event_stream 能力都有選用的 scope
,用來決定
連結用戶端會收到的事件子樹狀結構。scope
可以是以下兩者之一
單一子樹狀結構或參照多個子項。
轉送 event_stream 功能
元件可以 offer 從事件串流中移除 event_stream 功能 傳遞至其他元件event_stream 功能無法公開。
如要進一步瞭解架構如何轉送元件功能,請參閱 功能轉送。
提供
提供事件能力可讓子項元件存取該能力:
{
offer: [
{
event_stream: "started",
from: "parent",
scope: ["#child_a"]
to: [ "#child-a", "#child_b" ],
},
{
event_stream: "stopped",
from: "parent",
to: "#child-c",
}
]
}
您只能透過父項提供事件。
使用 event_stream 功能
如要採用事件能力,元件必須使用 event_stream
技術。如要合併事件串流,只要在
單一 use
。
如要要求這項能力,請為該功能新增 use
宣告:
{
use: [
{ event_stream: ["started", "stopped"] },
]
}
event_streams 只能用在 from: "parent"
。
event_stream 轉送範例
請參考以下元件拓撲範例:
請留意本範例的下列重要面向:
core/archivist
:透過整個拓撲接收started
事件 會從root
轉送的事件能力。// root.cml { offer: [ { event_stream: "started", from: "parent", to: "#core", }, ] } // core.cml { offer: [ { event_stream: "started", from: "parent", to: "#archivist", }, { event_stream: "started", from: "parent", to: "#test_manager", scope: ["#test_manager"], } ] } // archivist.cml { use: [ { event_stream: "started" }, ] }
core/test_manager/archivist
:收到所有測試的started
事件 接收來自test_manager
的事件能力。// test_manager.cml { offer: [ { event_stream: "started", from: "parent", to: "#archivist", }, { event_stream: "started", from: "parent", to: "#tests", // Downscopes the event to the tests collection scope: ["#tests"], } ] } - The root Archivist gets `started` events for all components in the topology from the root, whereas the embedded Archivist only gets events from its own test collection. NOTE: An event_stream must be routed through the entire topology from the root component_manager all the way down to the component that wants to use the event. event_streams cannot be used `from: "framework"`, and they are not automatically made available in every component's environment. // archivist.cml { use: [ { event_stream: "started", from: "parent", }, ] }
core/test_manager/tests:test-12345
:接收已啟動的活動 並透過event_stream
能力轉送test_manager
。// test-12345.cml { use: [ { event_stream: "started", from: "parent", }, ] }