fastdds.ignore_local_endpoints 屬性

Fast DDS 的 fastdds.ignore_local_endpoints 屬性用于控制同一 DomainParticipant 下的本地端點(即 DataWriter 和 DataReader)是否自動匹配。以下是對該功能的詳細解釋,并翻譯為中文,結合其上下文、實現原理和使用場景,確保清晰易懂。


一、背景與問題描述

在 Fast DDS(或其他 DDS 實現)中,默認情況下,當一個 DomainParticipant 內的 DataReader 和 DataWriter 訂閱或發布在同一個 Topic 上,并且它們的 QoS(服務質量)配置兼容時,它們會自動匹配。這意味著 DataWriter 發布的數據會被同一 DomainParticipant 內的 DataReader 接收,形成一種“反饋循環”(feedback loop)。

問題

  • 這種本地匹配可能導致不必要的復雜性。例如,一個應用程序可能在同一 DomainParticipant 下同時創建了一個 DataWriter 和一個 DataReader,它們共享同一個 Topic。在這種情況下,DataWriter 發送的數據會被本地 DataReader 接收,即使這些數據本意是發送給其他遠程 DomainParticipant 的。
  • 如果應用程序不希望本地端點之間通信,開發者需要在 DataReader 的監聽器(DataReaderListener)中通過檢查數據的 GuidPrefix_t(標識發送者的唯一前綴)來過濾掉來自同一 DomainParticipant 的消息。這種過濾邏輯會增加應用程序的復雜性,并且數據仍需經過整個接收流程(從網絡層到應用層),才被丟棄,造成資源浪費。

解決方法

  • Fast DDS 提供了 fastdds.ignore_local_endpoints 屬性,允許開發者禁止同一 DomainParticipant 內的本地端點(DataWriter 和 DataReader)進行匹配,從而避免上述問題。

二、fastdds.ignore_local_endpoints 屬性詳解

屬性說明
  • 屬性名稱:fastdds.ignore_local_endpoints
  • 屬性值
    • "true":禁止同一 DomainParticipant 內的本地端點匹配。DataWriter 和 DataReader 即使在同一 Topic 上且 QoS 兼容,也不會相互匹配。
    • "false":允許本地端點匹配(默認行為)。
  • 默認值:"false",即默認情況下本地端點會自動匹配。
  • 作用范圍:該屬性應用于 DomainParticipant 的 PropertyPolicyQos,影響該 DomainParticipant 內的所有 DataWriter 和 DataReader。
  • 配置方式
    • 可通過 C++ API 或 XML 配置文件設置。
實現原理
  • Fast DDS 使用 RTPS(Real-Time Publish-Subscribe)協議管理端點匹配。當 fastdds.ignore_local_endpoints 設置為 "true" 時,Fast DDS 的內部匹配邏輯會跳過同一 DomainParticipant 內的 DataWriter 和 DataReader 的匹配檢查。
  • 具體來說,Fast DDS 在端點發現階段(Discovery Phase)會檢查 GuidPrefix_t(標識 DomainParticipant 的唯一前綴)。如果發現 DataWriter 和 DataReader 屬于同一 DomainParticipant,且該屬性為 "true",則不會將它們加入彼此的匹配列表。
  • 這避免了本地數據通過 RTPS 協議的傳輸和處理,減少了不必要的網絡和 CPU 開銷。
優勢
  1. 簡化應用邏輯:無需在 DataReaderListener 中手動過濾本地數據,降低應用程序復雜度。
  2. 性能優化:數據不會被發送到本地 DataReader,減少了不必要的處理開銷。
  3. 明確語義:明確區分本地和遠程通信,適合需要嚴格隔離本地端點通信的場景。
局限性
  • 如果應用程序確實需要本地端點通信(例如用于測試或調試),設置 "true" 會阻止這種行為。
  • 配置為 "true" 后,同一 DomainParticipant 內的 DataWriter 和 DataReader 無法通信,即使這是預期的行為。
無效值處理
  • 如果設置了無效值(如非 "true" 或 "false" 的值),Fast DDS 會回退到默認行為(即 "false",允許本地端點匹配)。

三、配置示例

以下是如何在 Fast DDS 中配置 fastdds.ignore_local_endpoints 的兩種方式:

1. 通過 C++ API 配置

cpp

#include <fastdds/dds/domain/DomainParticipantFactory.hpp>

#include <fastdds/dds/domain/DomainParticipant.hpp>

using namespace eprosima::fastdds::dds;

int main() {

DomainParticipantQos pqos;

// 設置屬性以忽略本地端點匹配

pqos.properties().properties().emplace_back(

"fastdds.ignore_local_endpoints", "true"

);

// 創建 DomainParticipant

DomainParticipant* participant =

DomainParticipantFactory::get_instance()->create_participant(0, pqos);

// 繼續創建 DataWriter 和 DataReader

// ...

return 0;

}

2. 通過 XML 配置文件

xml

<?xml version="1.0" encoding="UTF-8" ?>

<dds xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">

<profiles>

<participant profile_name="ignore_local_endpoints_domainparticipant_xml_profile">

<rtps>

<propertiesPolicy>

<properties>

<!-- 忽略本地端點匹配 -->

<property>

<name>fastdds.ignore_local_endpoints</name>

<value>true</value>

</property>

</properties>

</propertiesPolicy>

</rtps>

</participant>

</profiles>

</dds>

加載 XML 配置文件:

cpp

#include <fastdds/dds/domain/DomainParticipantFactory.hpp>

using namespace eprosima::fastdds::dds;

int main() {

DomainParticipantFactory::get_instance()->load_profiles();

DomainParticipant* participant =

DomainParticipantFactory::get_instance()->create_participant(

0, PARTICIPANT_QOS_DEFAULT, nullptr, StatusMask::all(),

"ignore_local_endpoints_domainparticipant_xml_profile"

);

// 繼續創建 DataWriter 和 DataReader

// ...

return 0;

}


四、適用場景

  1. 分布式系統中的數據隔離
    • 在分布式系統中,一個 DomainParticipant 可能同時包含 DataWriter 和 DataReader,但只希望與遠程 DomainParticipant 通信。例如,機器人系統中一個節點發布傳感器數據,只需發送給其他節點,而不需要本地 DataReader 接收。
    • 配置:將 fastdds.ignore_local_endpoints 設為 "true"。
  2. 性能優化
    • 在高吞吐量場景中,避免本地端點匹配可以減少不必要的 RTPS 數據傳輸和處理。例如,實時視頻流處理系統中,同一節點內的 DataReader 不需要接收本地 DataWriter 的數據。
    • 配置:結合 VOLATILE Durability 和 BEST_EFFORT Reliability,進一步優化性能。
  3. 簡化應用程序邏輯
    • 當應用程序不希望處理本地數據過濾邏輯時,啟用此屬性可以直接在中間件層面阻止本地匹配,簡化 DataReaderListener 的實現。
  4. 測試與調試例外
    • 如果需要測試本地端點通信(如在單一節點上模擬發布-訂閱行為),應保持默認值 "false"。

五、注意事項

  1. QoS 兼容性不受影響
    • fastdds.ignore_local_endpoints 僅影響同一 DomainParticipant 內的端點匹配,不影響 QoS 兼容性檢查(如 DurabilityQos、ReliabilityQos)。
    • 仍需確保 DataWriter 和 DataReader 的 QoS 配置(如 Durability、Reliability)與遠程端點兼容。
  2. 調試匹配問題
    • 如果配置后發現 DataReader 未接收到預期數據,檢查是否因 fastdds.ignore_local_endpoints 阻止了本地匹配。
    • 啟用 Fast DDS 日志(fastdds.log 屬性)或使用 Fast DDS Monitor 工具驗證端點匹配狀態。
  3. 與 Durability 模式的關系
    • 對于 VOLATILE 模式,忽略本地端點通常影響較小,因為數據本身不存儲歷史。
    • 對于 TRANSIENT_LOCAL、TRANSIENT 或 PERSISTENT 模式,忽略本地端點可避免不必要的歷史數據傳輸。
  4. 默認行為適用性
    • 默認值 "false" 適合需要本地端點通信的場景,如單機測試或開發環境。
    • 在生產環境中,通常建議設置為 "true",以避免意外的本地數據反饋。

六、總結

fastdds.ignore_local_endpoints 屬性是 Fast DDS 提供的一項功能,用于控制同一 DomainParticipant 內 DataWriter 和 DataReader 的匹配行為:

  • 值 "true":禁止本地端點匹配,適合分布式系統或需要隔離本地通信的場景,減少應用層過濾邏輯和性能開銷。
  • 值 "false"(默認):允許本地端點匹配,適合測試或需要本地通信的場景。
  • 配置方式:通過 C++ API 或 XML 配置文件設置,作用于整個 DomainParticipant。
  • 適用場景:分布式系統、性能優化、簡化應用程序邏輯。
  • 注意事項:確保配置值有效,檢查匹配狀態,結合其他 QoS(如 Durability)優化系統行為。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93749.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93749.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93749.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華清遠見25072班C語言學習day11

重點內容:函數&#xff1a;定義&#xff1a;返回值類型 函數名(參數列表) { //函數體 }函數的參數列表中可以有多個數據返回值&#xff1a;如果函數沒有返回值可以寫成void 返回值的作用&#xff0c;函數的結果用來返回給主調函數的&#xff0c;如果主調函數處不需要函數的結果…

視覺語言導航(7)——VLN的數據集和評估方法 3.2

這是課上做的筆記&#xff0c;因此很多記得比較急&#xff0c;之后會逐步完善&#xff0c;每節課的邏輯流程寫在大綱部分。成功率(SR)導航誤差(NE)成功加權路徑長度&#xff08;SucceedPLength&#xff09;軌跡長度&#xff08;TL&#xff09;先知成功率&#xff08;OS&#xf…

ElasticSearch不同環境同步索引數據

目的&#xff1a;在生產環境把一個索引的數據同步到測試環境中1、在生產環境導出json數據curl -u "adims_user:xkR%cHwR5I9g" -X GET "http://172.18.251.132:9200/unify_info_mb_sp_aggregatetb_0004/_search?scroll1m" -H Content-Type: applicatio…

咨詢進階——解讀咨詢顧問技能模型

適應人群為咨詢行業從業者、咨詢團隊管理者、想提升咨詢技能的職場人士及咨詢公司培訓人員。主要內容圍繞咨詢顧問技能模型展開,核心包括五大核心能力(解決問題能力,涵蓋洞察力、分析技巧、問題構建等,從識別問題實質到構建新分析方法分層次闡述;管理能力,涉及管理他人與…

2025年- H98-Lc206--51.N皇后(回溯)--Java版

1.題目描述2.思路 二維數組集合 (1&#xff09;N皇后規則 1&#xff09;不能同行&#xff08;同一行不能出現2個皇后&#xff09; 2&#xff09;不能同列&#xff08;同一列不能出現2個皇后&#xff09; 3&#xff09;不能說45度或135度&#xff08;斜對角線不能出現2個皇后&am…

5G + AI + 云:電信技術重塑游戲生態與未來體驗

在數字娛樂蓬勃發展的今天&#xff0c;游戲產業已然成為科技創新的前沿陣地。電信網絡也經歷了一場深刻的蛻變&#xff0c;從最初僅僅是 “內容傳輸管道”&#xff0c;搖身一變成為與游戲深度綁定的技術共生體。5G 不斷刷新著體驗的邊界&#xff0c;AI 徹底顛覆傳統的創作模式&…

【React Hooks】封裝的藝術:如何編寫高質量的 React 自-定義 Hooks

【React Hooks】封裝的藝術&#xff1a;如何編寫高質量的 React 自-定義 Hooks 所屬專欄&#xff1a; 《前端小技巧集合&#xff1a;讓你的代碼更優雅高效》 上一篇&#xff1a; 【React State】告別 useState 濫用&#xff1a;何時應該選擇 useReducer 作者&#xff1a; 碼力…

華為GaussDB的前世今生:國產數據庫崛起之路

在數據庫領域&#xff0c;華為GaussDB已成為一顆耀眼的明星&#xff0c;為企業核心業務數字化轉型提供堅實的數據底座。但這并非一蹴而就&#xff0c;其背后是長達二十余年的技術沉淀、戰略投入與持續創新。本文將深入探尋華為GaussDB的歷史沿革與核心技術細節&#xff0c;展現…

數據結構初階(16)排序算法——歸并排序

2.4 歸并排序 歸并排序&#xff08;Merge Sort&#xff09;是基于分治思想的經典排序算法。核心邏輯&#xff1a; 分而治之——把復雜排序問題拆分成簡單子問題解決&#xff0c;再合并子問題的結果。聯系鏈表的合并&#xff1a;兩個有序鏈表l1、l2創建新鏈表l3&#xff08;帶頭…

MATLAB實現匈牙利算法求解二分圖最大匹配

MATLAB實現匈牙利算法求解二分圖最大匹配 匈牙利算法&#xff08;也稱為Kuhn-Munkres算法&#xff09;是解決二分圖最大匹配問題的經典算法。 代碼 function [matching, max_match] hungarian_algorithm(adjMatrix)% HUNGARIAN_ALGORITHM 實現匈牙利算法求解二分圖最大匹配% 輸…

自定義table

更好<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><title>數據表格</title><style>* {margin: 0;padding: 0;box-sizing: border-box;font-size: 14px;}html,body {width: 100%;height: 100%…

面向R語言用戶的Highcharts

如果您喜歡使用 R 進行數據科學創建交互式數據可視化&#xff0c;那么請你收藏。今天&#xff0c;我們將使用折線圖、柱狀圖和散點圖來可視化資產回報。對于我們的數據&#xff0c;我們將使用以下 5 只 ETF 的 5 年月回報率。 SPY (S&P500 fund)EFA (a non-US equities fun…

【測試工具】OnDo SIP Server--輕松搭建一個語音通話服務器

前言 Ondo SIP Server 是一款基于 SIP(Session Initiation Protocol)協議的服務器軟件&#xff0c;主要用于實現 VoIP(Voice over IP)通信&#xff0c;支持語音通話、視頻會議等多媒體會話管理&#xff0c;非常適合學習和測試VoIP的基本功能。本文介紹Ondo SIP Server的安裝、…

瘋狂星期四文案網第42天運營日記

網站運營第42天&#xff0c;點擊觀站&#xff1a; 瘋狂星期四 crazy-thursday.com 全網最全的瘋狂星期四文案網站 運營報告 今日訪問量 今日搜索引擎收錄情況 網站優化點 優化一些發現的seo錯誤 增加顏文字欄目 增加了一些tag

使用空模型實例調用輔助函數,確定在量化過程中哪些層會被跳過(43)

在Facebook的OPT-350M中,模型的頭部(lm_head)與解碼器的嵌入標記層(decoder.embed_tokens)共享其權重。 print(model.model.decoder.embed_tokens) print(model.lm_head)輸出結果 Embedding(50272, 512

從0-1使用Fastmcp開發一個MCP服務,并部署到阿里云百煉 -持續更新中

目的&#xff1a; 在本地使用fastmcp開發一個mcp,然后注冊到阿里云的百煉里面。實現在百煉里面創建智能體的時候直接引用自己開發的MCP 已完成&#xff1a;本地環境安裝 待完成&#xff1a; 1.根據需求實現一個MCP中可以調用某應用的多個API即 mcp.tool()、mcp.prompt()、接入大…

設計模式之匯總

設計模式 零、設計原則 0.1 單一職責 0.2 接口隔離 0.3 開閉原則 0.4 依賴倒置0.5 迪米特法則&#xff0c;最小知道原則用戶關機 只和朋友通信 朋友條件&#xff1a; 1&#xff09;當前對象本身&#xff08;this&#xff09; 2&#xff09;以參量形式傳入到當前對象方法中的對象…

第6章 Decoder與Encoder核心組件

前言 Netty從底層Java通道讀取ByteBuf二進制數據&#xff0c;傳入Netty通道的流水線&#xff0c;隨后開始入站處理。在入站處理過程中&#xff0c;需要將ByteBuf二進制類型解碼成Java POJO對象。這個解碼過程可以通過Netty的Decoder&#xff08;解碼器&#xff09;去完成。 在…

[已解決]當啟動 Spring Boot 應用時出現 Using generated security password xxx提示

當啟動 Spring Boot 應用時出現 Using generated security password xxx提示當啟動 Spring Boot 應用時出現 Using generated security password xxx提示&#xff0c;這是 Spring Security 自動配置的默認行為&#xff0c;通常發生在你??未自定義安全配置??但引入了 Spring…

自動分析需求,PRD 生成只需 SOLO 一步!

資料來源&#xff1a;火山引擎-開發者社區 寫不清需求&#xff1f;PRD 難產&#xff1f;開發總跑偏&#xff1f;這些痛點&#xff0c;SOLO 來解決。 TRAE SOLO 是行業首個 Context Engineer。它不止協助編碼&#xff0c;更能基于精準上下文理解和工具調用&#xff0c;從構思、…