建立配接器的事件類型

 

本主題提供建立用於開發配接器之「事件類型」(Event Type) 的指導方針。

System_CAPS_ICON_note.jpg 注意事項


舊版 StreamInsight 中引用了輸入和輸出配接器。 雖然它們已被目前的開發模型取代,維護舊版程式碼的開發人員仍然可以使用它們。 如需有關目前開發模型的詳細資訊,請參閱開發人員指南 (StreamInsight)

每一類型都會用於下列的開發階段:

  1. 撰寫具類型的配接器。 具類型的配接器會使用事件類型當做泛型參數,以便在建立要加入佇列的新事件物件時初始化適當的結構。

  2. 撰寫查詢範本。 查詢範本會在 CepStream 物件最上層的 LINQ 中指定,該物件的定義是根據事件類型。

如需有關事件的其他一般資訊,請參閱<事件結構>。

當事件裝載 (亦即裝載中欄位的數目及其類型) 已固定且事先得知時,您就可以建立具類型的配接器。 透過具類型的配接器,配接器的所有執行個體都會產生相同的固定裝載格式。 通常具有固定資料結構的事件來源都是這種情況。

當您建立具類型的配接器時,可以定義代表固定裝載的 .NET 類別或結構;如果您的事件裝載可以以單一欄位表示,則可以使用基本類型。 使用結構或類別時,您只能使用公用欄位和屬性當做裝載欄位。 系統會忽略私用欄位和屬性以及類別方法,而且它們無法用於事件類型中。 您可以使用這個事件類型宣告來擴展輸入配接器中的事件類型,並且從輸出配接器的具型別事件類型中取得結果。 下列範例會定義具有兩個屬於 int 類型之裝載欄位 V1V2 的簡單事件類型。

public class MyPayload  
{  
    public int V1 { get; set; }  
    public int V2 { get; set; }  
}  

另一個範例會示範如何使用巢狀事件類型:

public class ComplexPayload  
{  
    public ValueType Value { get; set; }  
    public bool Status  { get; set; }  
}  
  
public class ValueType  
{  
    public double Value { get; set; }  
    public int Quality  { get; set; }  
}  

當您想要讓特定來源或接收的相同配接器能夠進行設定,以便處理多種事件類型時,不具類型的配接器就很有用。 將配接器繫結到查詢時,這些事件類型的事件裝載格式會提供給配接器,當做組態規格的一部分。 這類狀況的範例是包含變動欄位數目的 .csv 檔案。 組成裝載的確切欄位集可能是由查詢設計人員 (而非建立配接器的開發人員) 在繫結和具現化查詢時所決定的。 另一個範例是 SQL 資料表的配接器,其中所產生的事件類型會取決於資料表的結構描述或針對資料表所發出的查詢。 如需詳細資訊,請參閱<建立輸入和輸出配接器>。

查詢範本的規格是根據具有特定事件類型的 CepStream 物件,該物件在設計階段必須是已知的。 中繼 CepStream 物件連同查詢範本規格可以使用成員 init 運算式包含專案子句 (LINQ 中的 "select") 中所隱含定義的新類型。

裝載欄位需求

StreamInsight 伺服器中的事件類型為欄位 (而非 .NET 結構) 的排序清單,不會針對其欄位強加順序。 對於不具類型的配接器而言,事件欄位的順序會變得很重要。這些配接器會依照 ordinal 來存取欄位,因為這些欄位在配接器設計階段是未知的。 依照預設慣例,.NET 結構 (當做事件類型使用) 會根據欄位名稱的字典編撰順序排列其欄位順序。

一旦建立事件類型之後,下一個步驟就是確保相依的專案發現它的能力。 請注意,.NET 環境讓開發人員能夠以鬆散偶合的分散式方式來建立模組,並將模組當做組件來出貨。 然後可以將這些組件放在一起,以建立整合式應用程式、加以測試並部署到實際環境中。

請記得,可執行的 StreamInsight 查詢是將查詢範本與輸入和輸出配接器的執行個體成功繫結在一起的結果 (根據查詢的輸入和輸出上相符的事件類型)。 根據開發環境,您可能必須提供事件類型的存取權給其他人。 例如,配接器開發人員和查詢開發人員可能必須獨立處理其各自的模組。假設事件類型的發現能力有以下的案例:

  • 如果配接器開發人員是事件類型的發行者,此配接器開發人員就可以使用 StreamInsight Managed API 來撰寫配接器,然後傳送 .NET 組件。 其他開發人員可以使用 ildasm.exe 或從 Visual Studio 專案內部參考 DLL,藉以在此 .NET 組件上反映,並且判斷事件類型。 使用這種方法時,不需要 StreamInsight 伺服器的存取權就可以存取事件類型。

  • 如果 StreamInsight 伺服器管理員是事件類型的發行者,此管理員或開發人員就可以在 StreamInsight 伺服器中部署事件類型。 然後,擁有 StreamInsight 伺服器之存取權的查詢開發人員就可以使用適用的物件模型 API 呼叫來檢查中繼資料項目並判斷事件類型。 配接器開發人員也可以撰寫支援這個事件類型的具類型的配接器。

  • 如果配接器開發人員和查詢開發人員實際上已中斷連接 (每位人員都使用自己的一般事件類型表示),就會在查詢繫結時間內進行其個別事件類型是否相符的驗證。 如果存在相符項目,繫結就會成功。

  • 如果查詢開發人員沒有配接器組件或 StreamInsight 伺服器 (其中已註冊配接器) 的存取權,此開發人員就可以參考配接器的產品文宣,或是透過該領域特有的資料傳輸通訊協定的通用知識 (例如金融交易中的金融資訊交換 (FIX) 或是路透社市場資料系統 (RMDS)) 來判斷事件類型。

如需支援的資料類型的描述,請參閱<事件結構>。

在配接器開發期間,將會使用 DataTimeOffset 類型指定事件時間戳記。 但是,事件類型裝載欄位的定義中只支援 DateTime 類型。 如果您將 DateTimeOffset 類型的資料匯入事件欄位中,您必須將資料轉換成 UTC 種類的 DateTime。 例如,可能會從 database or your report server without the permission of the system administrator. 資料庫填入裝載欄位,或是將事件時間戳記欄位複製到裝載欄位中進行計算。

建立輸入和輸出配接器
事件結構
StreamInsight 伺服器概念

顯示: