fastdds router-3.開始

1. 項目概述

DDS路由器是由eProsima開發的跨平臺非圖形化應用程序,由Fast DDS提供支持,允許創建一個通信橋,連接兩個DDS網絡,否則將被隔離。DDS路由器的主要用途是通信兩個物理或虛擬分離的DDS網絡,這些網絡屬於不同的LAN,允許每個網絡的實體模糊地發佈和訂閱本地和遠程主題。

DDS路由器是一個內部運行參與者的應用程序,參與者是DDS域參與者的抽象。這些參與者中的每一個都是一個通信接口,是特定DDS網絡配置的“門”。這些參與者允許應用程序同時連接到不同的DDS網絡。每當這些參與者中的一個從其所連接的DDS網絡接收到消息時,他們將通過其他參與者轉發數據和消息源。DDS路由器配置及其操作主題取決於初始DDS路由器配置。

以下模式表示DDS路由器本地用例。此場景顯示了由於傳輸協議(UDP、TCP等)、發現協議(簡單、發現服務器等)或每個DDS實體使用的DDS域Id而彼此隔離的不同DDS網絡。將DDS路由器配置爲具有4個不同的參與者,每個參與者配置爲一個獨立的DDS網絡,將在內部創建4個參與者。到達其中一個參與者的所有數據將通過其他參與者轉發,從而允許所有機器彼此連接,而不受其不同配置的影響。該數據傳輸將在不復制數據的情況下完成,因爲所有參與者將共享分配數據的指針,成功實現零複製通信機制。



1.1. Wan通信

要實現在不同LAN中工作的兩個網絡的WAN通信,需要在每個LAN上運行DDS路由器應用程序。部署的DDS路由器將通過WAN使用DDS相互通信,並將在LAN中接收的每個消息路由到遠程DDS路由器。一旦遠程路由器接收到數據,它就會將數據傳輸到所連接的本地網絡。這樣,兩個DDS網絡的行爲就好像它們屬於同一個LAN。

另一個重要特徵是WAN通信不限於一對DDS路由器。可以使用eProsima發現服務器發現機制(非多播網絡上的動態發現)來執行WAN通信。因此,連接到相同發現服務器的任何DDS路由器都將作爲標準DDS節點工作,發佈和訂閱共享的DDS主題。這允許創建一個無限制且高度可擴展的分散分佈式DDS網絡。



1.2 用法描述

DDS路由器是一個終端(非圖形化)應用程序,只要DDS網橋正在運行,它就會創建DDS網橋。YAML格式的配置非常直觀,易於閱讀。整個應用程序被認爲是用戶友好的,遵循面向用戶的設計。

  • Run. 爲了運行DDS路由器應用程序,只需要特定配置的YAML配置文件(請參閱一節以檢查如何配置DDS路由器)(請參閱第節以檢查應用程序支持的參數)。
  • Interact. DDS Router應用程序運行後,只需更改YAML配置文件即可在運行時更改此通信中涉及的主題(有關重新配置正在運行的DDS Router的更多詳細信息,請參閱“重新加載主題”一節)。
  • Stop. 要停止DDS路由器,只需向進程發送^C信號,它就會優雅地關閉整個應用程序(有關如何關閉應用程序的詳細信息,請參閱關閉應用程序一節)。


1.3 常用用例

DDS路由器可以應用的不同情況非常不同,並且隨着未來版本中添加新的參與者類型,這種情況會增加。這些是迄今爲止最常見的用例:



2. 用法示例

本示例將作爲一個實踐教程,旨在介紹eProsima DDS路由器提供的一些關鍵概念和功能。

兩個不相交的DDS網絡將通過一對路由器橋接,允許在每個網絡上託管的端點之間進行連接。特別是,兩個ShapesDemo實例將在正確配置和部署上述兩個路由器後建立通信。

此示例適用於LAN和WAN場景。對於WAN情況,請確保使用公共IP地址而不是專用IP地址,並且通過在Internet路由器設備中正確配置端口轉發,可以訪問提供的端口。



2.1 啓動ShapesDemo

ShapesDemo是一個發佈和訂閱在板上移動的不同顏色和大小的形狀的應用程序。這不過是一個圖形工具,用於測試特定DDS協議實現的正確性,以及證明與其他實現的互操作性。

讓我們在一個DDS網絡中啓動ShapesDemo實例,並使用默認設置在主題“正方形”、“圓形”和“三角形”中發佈。

現在,在其他網絡中運行另一個實例,並訂閱在發佈者端選擇的相同主題(使用默認設置)。

如果您在LAN場景中嘗試此示例,請確保在其中一個ShapesDemo實例中使用了不同的DDS域id,以避免它們之間的直接通信。



2.2 Router配置

運行DDS路由器實例只需要配置文件。簡而言之,如果每個路由器的相關主題與允許列表中包含的篩選器匹配,則每個路由器都會轉發消息。也可以單獨指定阻止列表,或者除了允許列表之外,還可以指定阻止列表。

讓我們首先只添加一個Square Topic:

allowlist:
  - name: Square

除了選擇我們希望發送/接收數據的主題之外,我們還必須配置最終執行通信的參與者。每個路由器實例將包含一個簡單的和一個WAN參與者。簡而言之,簡單的參與者將負責與相應的ShapesDemo應用程序進行本地通信,而WAN參與者將負責橋接兩個DDS網絡之間的連接。

簡單參與者所需的唯一配置是DDS域標識符。

- name: SimpleParticipant
  kind: local
  domain: 0

如果在同一LAN中啓動兩個路由器,請在兩個配置文件之一中設置不同的域id(與之前爲ShapesDemo設置的相同)。

廣域網參與者的配置更爲複雜,我們在此不再詳細介紹。簡而言之,在本例中,兩個WAN參與者都將通過UDP進行通信,其中一個是客戶端,另一個是服務器角色。兩個參與者都需要有一個偵聽地址(對於UDP情況),在那裏他們將期望接收流量,而對於客戶端,則需要一個連接地址,該地址指向服務器的偵聽地址。有關詳細信息,請參閱WAN參與者和WAN配置。您還可以查看WAN示例,瞭解如何配置此類參與者的詳細說明。

以下是客戶端和服務器配置文件的示例:

# client-ddsrouter.yaml
version: v3.0

allowlist:
  - name: Square

participants:

  - name: SimpleParticipant
    kind: local
    domain: 0

  - name: ClientWAN
    kind: wan
    connection-addresses:
      - ip: 192.168.1.8
        port: 11800
        transport: udp
    listening-addresses:
      - ip: 192.168.1.4
        port: 11008
        transport: udp

# server-ddsrouter.yaml
version: v3.0

allowlist:
  - name: Square

participants:

  - name: SimpleParticipant
    kind: local
    domain: 1

  - name: ServerWAN
    kind: wan
    listening-addresses:
      - ip: 192.168.1.8
        port: 11800
        transport: udp


2.3 Router執行

現在,配置文件就緒後,啓動DDS路由器實例就像執行以下命令一樣簡單:

ddsrouter -c config-file.yaml

設置好兩個路由器後,兩個ShapesDemo實例之間的通信應該已經建立,因此方形現在在用戶面板中可見。

DDS Router支持在運行時動態添加/刪除主題(請參閱重新加載主題)。讓我們通過將圓圈主題添加到兩個路由器的允許列表來測試這個特性。此外,通過刪除方形主題(從路由器的允許列表中刪除此主題就足夠了),方形數據應該停止到達訂戶。或者,可以將方形主題添加到阻止列表中,從而達到相同的效果。有關允許列表的詳細信息,請參閱主題篩選。

allowlist:
  - name: Circle

應用這些更改後,用戶側的正方形不再更新(看起來可見但已凍結),而圓形應該更新。

有關如何配置和設置路由器的更多信息,以及如何發現DDS路由器可用作有用工具的多個場景,請隨意瀏覽示例和用例部分。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章