論文首先對數據分發服務中的發布訂閱過程進行簡介,并依據相應規范分別設計發布過程和訂閱過程,其中根據相應時序圖給出清晰的網絡通信過程。最后,通過以上設計結果逐步構建基于數據分發服務的發布訂閱系統類圖并逐一實現。
【關鍵詞】數據分發服務 訂閱過程 訂閱系統
1 發布過程實現
根據OpenDDS的開發者文檔一個簡單的消息發布過程需要分為發布過程和訂閱過程,其中發布過程又包含初始化參與者對象、注冊發布數據類型和創建自定義主題數據信息、創建對應主題發布者、創建相關數據寫入者和等待對應主題訂閱者以及發布相關數據五個階段,訂閱過程又包含初始化參與者對象、注冊發布數據類型和創建對應主題、創建對應主題訂閱者、創建相關數據讀取者和監聽者、數據讀取者監聽實現五個階段。
1.1 初始化參與者
首先在主函數中初始化一個OpenDDS的參與者。DDS類圖中通過命令行參數來初始化一個域參與者工廠。create_participant()函數操作運用域參與者工廠來注冊這個過程,通過指定ID來在域中創建一個參與者。這個參與者使用默認的QoS策略和無監聽者。
1.2 注冊相關數據類型和創建對應主題對象
首先,創建一個MessageTypeSupportImpl對象,之后調用register_type()函數用類型名注冊類型。其中注冊類型為空字符串類型名,因為MessageTypeSupport接口庫被標識作為類型名。同時,也可以運用一個特定的類型名,如“Message”。
1.3 創建發布者
接下來用默認的發布者QoS創建發布者。如發布/訂閱初始化模塊類DDS類圖中通過DDS::DomainParticipant_var對象創建發布者。
1.4 創建數據寫入者和等待訂閱者
創建好發布者之后,通過發布者創建數據寫入者。依據主題對象的引用、默認QoS兼容性策略和一個空的監聽者對象引用來創建數據寫入者。接著調用narrow函數將數據寫入者引用轉換為一個MessageDataWriter對象引用,因此我們能夠運用特定類型進行發布操作。
2 訂閱過程實現
大部分訂閱者代碼與發布者的是相近或者完全相同的。如果代碼相似本文會省略掉一部分代碼,從而專注于實現細節的差異。
2.1 初始化參與者
訂閱者開始的實現部分與發布者是完全相同的,我們會初始化服務并加入域中。
2.2 注冊數據類型和創建對應主題信息對象
下一步,初始化消息類型和主題。當主題在域中以相同的數據類型和兼容的QoS策略已經被初始化時,create_topic()函數的調用會返回一個引用來響應現存的主題。如果這個類型和QoS策略在create_topic()調用中被明確指定,與現存的主題不相互匹配,那么之后會調用失敗。此時,同樣有find_topic()這樣的函數操作我們的訂閱者使得其能夠簡單的獲取現存的主題。
2.3 創建訂閱者
下一步,以默認的QoS策略創建一個訂閱者。如發布/訂閱初始化模塊類DDS類圖中通過DDS::DomainParticipant_var對象創建訂閱者。
2.4 創建數據讀取者和監聽者
我們需要用創建的數據讀取者來關聯監聽者對象,當數據可用時,可以用監聽者對象來發現。如發布/訂閱初始化模塊類圖中的構造了一個監聽者對象。DataReaderListenerImpl類將應用于下一部分。
監聽者被分配在堆上并且被分配給一個DataReaderListener_var對象。這種類型提供引用計數行為,因此當最后的引用被移除時,監聽者自動清理。在OpenDDS應用程序代碼中這種堆分配是典型的應用方式并且使得應用程序開發人員從紛繁復雜的分配對象的生命周期管理中解脫出來。
3 結束語
論文首先基于數據分發服務的相關標準對發布訂閱過程進行了簡介,數據分發服務是一種以發布/訂閱作為主要通信方式的網絡服務模型結構,根據相應規范分別設計發布過程和訂閱過程。在網絡通信交互環境下,系統的各個節點都可以作為發布或訂閱方且可以同時兼具兩者。當開始網絡傳輸時,主要分為發布過程和訂閱過程。最后,通過以上設計結果逐步構建基于數據分發服務的發布訂閱系統類圖并逐一實現。
參考文獻
[1]OMG,Data distribution service for real-time systems specification[S].Version1.0.http://www.omg.org/spec/DDS/ Dec.2004.
[2]OMG,Data distribution service for real-time systems specification[S].Version 1.1.http://www.omg.org/spec/DDS/ Nov.2005.
[3]OMG,Data distribution service for real-time systems specification[S].Version 1.2. http://www.omg.org/spec/DDS/ Jan.2007.
[4]Sanchez-Monedero J,Povedano-Molina J, Lopez-Vega J M,et al.Bloom filter-based discovery protocol for DDS middleware[J].Journal of Parallel & Distributed Computing,2011,71(10):1305-1317.
作者簡介
錢哨(1992-),男,江蘇省南京市人。現為南京航空航天大學碩士研究生在讀。主要研究方向為網絡與信息安全。
作者單位
南京航空航天大學計算機科學與技術學院 江蘇省南京市 211106