\documentclass[a4paper]{article}
\usepackage[margin=1in]{geometry} % 设置边距,符合Word设定
\usepackage{ctex}
\usepackage{lipsum}
\usepackage{graphicx} %插入图片的宏包
\usepackage{float} %设置图片浮动位置的宏包
\usepackage{listings}
\usepackage{xcolor}
\usepackage{hyperref}
\newcommand{\subsubsubsection}[1]{\paragraph{#1}\mbox{}\\}
\setcounter{secnumdepth}{4} % how many sectioning levels to assign numbers to
\setcounter{tocdepth}{4} % how many sectioning levels to show in ToC
\hypersetup{
colorlinks=true,
linkcolor=blue,
filecolor=magenta,
urlcolor=cyan,
pdftitle={Overleaf Example},
pdfpagemode=FullScreen,
}
\urlstyle{same}
\lstset{
numbers=left,
numberstyle= \tiny,
keywordstyle= \color{ blue!70},
commentstyle= \color{red!50!green!50!blue!50},
frame=shadowbox, % 阴影效果
rulesepcolor= \color{ red!20!green!20!blue!20} ,
escapeinside=``, % 英文分号中可写入中文
xleftmargin=2em,xrightmargin=1em, aboveskip=1em,
framexleftmargin=2em
}
\title{\heiti\zihao{2} RTI Routing Service}
\author{\songti theRunCom}
\date{\today}
\begin{document}
\maketitle
% \begin{abstract}
% \lipsum[2]
% \end{abstract}
\section{Introduction}
传统上,Connext DDS 应用程序只能与同一域中的应用程序通信。使用路由服务,您可以跨域发送和接收数据。您甚至可以在这个过程中对数据进行转换和过滤!
您不仅可以更改实际的数据值,还可以更改数据的类型。因此,发送和接收应用程序甚至不需要使用相同的数据结构。还可以通过使用允许和拒绝列表来控制发送哪些数据。
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterIntroAdapter} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{Quickly build and deploy bridges between natively incompatible protocols and technologies using Connext DDS} %最终文档中希望显示的图片标题
\end{figure}
\section{Routing Data}
路由数据是指将 Topic 用户数据从域传播到另一个域的过程,允许系统互连和扩展。
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterBasicInoutBox} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{Basic model of Routing Service} %最终文档中希望显示的图片标题
\end{figure}
The input DataReaders receive data from the publication side, whereas the output DataWriters send data to the subscription side.
\subsection{Routing a Topic between two different domains}
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterBasicTwoTopics} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{Basic Topic routing among domains for a Topic with name Squares} %最终文档中希望显示的图片标题
\end{figure}
一步一步修改Routing Service XML configuration。
\subsubsection{Define the service configuration element}
第一步是为 Routing Service 配置定义顶级元素:
\lstset{language=XML}
\begin{lstlisting}
<routing_service name="SquareRouter">
...
</routing_service>
\end{lstlisting}
\subsubsection{Specify which domains to join}
在顶级 Routing Service 配置中,我们需要指定 Routing Service 将加入哪些域。
\lstset{language=XML}
\begin{lstlisting}
<domain_route name="DomainRoute">
<participant name="domain0">
<domain_id>0</domain_id>
</participant>
<participant name="domain1">
<domain_id>1</domain_id>
</participant>
...
</domain_route>
\end{lstlisting}
\subsubsection{Define a processing context}
有助于提高路由服务性能的主要方面之一是并行处理数据流的能力。您可以创建线程上下文来执行与数据流处理相关的所有活动。线程上下文涉及一个或多个线程(线程池) ,由 Session 实体指定。
\lstset{language=XML}
\begin{lstlisting}
<session name="Session">
...
</session>
\end{lstlisting}
\subsubsection{Define the data flow}
TopicRoute 有效地表示了数据流所遵循的路由的建立。发布端的数据被转发到订阅端。
\lstset{language=XML}
\begin{lstlisting}
<topic_route name="RouteSquare">
<input participant="domain0">
<topic_name>Square</topic_name>
<registered_type_name>ShapeType</registered_type_name>
</input>
<output participant="domain1">
<topic_name>Square</topic_name>
<registered_type_name>ShapeType</registered_type_name>
</output>
</topic_route>
\end{lstlisting}
此属性的值是父 DomainRoute 中定义的参与者配置的名称。这就是如何指示 Input 和 Output 连接到哪个域,或者分别从哪个域创建 DataReader 和 DataWriter。
\subsection{Routing a group of Topics}
AutoTopicRoute 允许您指定一组可能的 TopicRoutes,路由服务将在动态发现要路由的主题时按需创建这些 TopicRoutes。
AutoTopicRoute 允许定义一组具有单个 Input 和单个 Output 的潜在 TopicRoutes,它们都绑定到相应的域。可以分别为发布主题和订阅主题指定正则表达式。因此,当 AutoTopicRoute 与出版物或订阅主题匹配时,它将创建一个 TopicRoute 来路由匹配的主题。
\lstset{language=XML}
\begin{lstlisting}
<auto_topic_route name="RouteAll">
<publish_with_original_info>true</publish_with_original_info>
<input participant="domain1">
<allow_topic_name_filter>*</allow_topic_name_filter>
<allow_registered_type_name_filter>*</allow_registered_type_name_filter>
<!--
Exclude RTI monitoring, administration and logging
topics. They all start with 'rti/'
-->
<deny_topic_name_filter>rti/*</deny_topic_name_filter>
</input>
<output participant="domain2">
<allow_topic_name_filter>*</allow_topic_name_filter>
<allow_registered_type_name_filter>*</allow_registered_type_name_filter>
<!--
Exclude RTI monitoring, administration and logging
topics. They all start with 'rti/'
-->
<deny_topic_name_filter>rti/*</deny_topic_name_filter>
</output>
</auto_topic_route>
\end{lstlisting}
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterBasicAutoRouteConcept} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{AutoTopicRoute concept} %最终文档中希望显示的图片标题
\end{figure}
AutoTopicRoute 的输入和输出配置可以分别包含 DataReader 和 DataWriter QoS。您可以利用 QoS 主题过滤器的概念,根据匹配主题的名称使用不同的 QoS 配置文件
\subsection{Using custom QoS Profiles}
\subsubsection{Defining a QoS Library}
您可以像定义常规 Connext DDS 应用程序一样为路由服务定义 XML QoS 配置文件。您可以直接在 < dds > root 元素下定义包含概要文件的 QoS 库。
\lstset{language=XML}
\begin{lstlisting}
<dds>
<qos_library name="MyQosLibrary">
<qos_profile name="MyQoSProfile">
<domain_participant_qos>
...
</domain_participant_qos>
<subscriber_qos>
...
</subscriber_qos>
<publisher_qos>
...
</publisher_qos>
<datareader_qos>
...
</datareader_qos>
<datawriter_qos>
...
</datawriter_qos>
</qos_profile>
</qos_library>
</dds>
\end{lstlisting}
\subsubsection{Specifying QoS for DDS entities}
您可以为路由服务创建的每个 DDS 实体配置 QoS。为此,创建底层 DDS 实体的每个路由服务实体都提供一个相应的标记来指定其 QoS。
\lstset{language=XML}
\begin{lstlisting}
<domain_route name="DomainRoute">
<participant name="domain0">
<participant_qos base_name="MyQosLibrary::MyQosProfile">
<!-- You can override inline any value -->
...
</participant_qos>
...
</participant>
...
</domain_route>
\end{lstlisting}
\href{https://community.rti.com/static/documentation/connext-dds/6.1.1/doc/manuals/connext_dds_professional/services/routing_service/routing_data.html#tablecustomqosentitytags}{Configuration of the Routing Service’s underlying DDS entities.}
\subsubsection{Applying topic filters to DDS Inputs and Outputs}
您可以利用主题过滤器的概念为 DDS Input 的 DataReader 和 Output 的 DataWriter 选择 QoS。您只需定义一个 QoS 配置文件,其中包含顶级 QoS,每个 QoS 都带有一个主题过滤器,然后在为输入 DataReader 和输出 DataWriter 指定 QoS 时从该配置文件继承。当路由服务根据相关主题的名称创建 DataReader 和 DataWriter 时,它将选择适当的 QoS。
\lstset{language=XML}
\begin{lstlisting}
<qos_library name="MyQosLibrary">
<qos_profile name="MyQoSProfileWithFilters">
<datareader_qos topic_filter="UserData_*"> ... </datareader_qos>
<datareader_qos topic_filter="Monitoring_*"> ... </datareader_qos>
<datareader_qos topic_filter="Admin_*"> ... </datareader_qos>
<!-- Same idea for the datawriter_qos -->
...
</qos_profile>
</qos_library>
\end{lstlisting}
然后,您可以定义一个 AutoTopicRoute 来路由系统中的所有主题,只需指示应使用从我们的配置文件中获得的 QoS 创建输入 DataReader:
\lstset{language=XML}
\begin{lstlisting}
<auto_topic_route name="RouteAll">
<input participant="domain0">
<datareader_qos base_name="MyQosLibrary::MyQoSProfileWithFilters">
</input>
<output participant="domain1">
<datawriter_qos base_name="MyQosLibrary::MyQoSProfileWithFilters">
</output>
</auto_topic_route>
\end{lstlisting}
主题筛选器是在 AutoTopicRoute 与发布或订阅主题匹配时应用的,因此可以使用正确的主题名称与主题筛选器匹配。所选择的 QoS 将用于创建生成的 TopicRoute 的输入 DataReader 和输出 DataWriter。
\subsection{Traversing Wide Area Networks}
您可以使用路由服务提供由多个应用程序组成的子系统之间的广域网连接,这些应用程序通过局域网(LAN)进行通信。这种体系结构允许您有效地扩展全局系统,创建分散在广域网上的多个数据库层。
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterWanTraversal} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{WAN traversal with Routing Service} %最终文档中希望显示的图片标题
\end{figure}
该模型简化了 NAT/防火墙存在下的网络配置,因为它们只需要配置为仅在网关路由服务之间转发流量。
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterWanConnectivity} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{Routing Service as WAN/Cloud gateway} %最终文档中希望显示的图片标题
\end{figure}
\subsubsection{Define a QoS profile that configures the RTI TCP transport}
\lstset{language=XML}
\begin{lstlisting}
<qos_library name="QosLib">
<qos_profile name="TcpWanProfile">
<!--
We define here the common properties to configure the TCP transport,
which includes mostly the loading of the transport implementation library.
Specific values for public address and port are set appropriate on each
Routing Service.
-->
<domain_participant_qos>
<transport_builtin>
<mask>MASK_NONE</mask>
</transport_builtin>
<property>
<value>
<element>
<name>dds.transport.load_plugins</name>
<value>dds.transport.TCPv4.tcp1</value>
</element>
<element>
<name>dds.transport.TCPv4.tcp1.library</name>
<value>nddstransporttcp</value>
</element>
<element>
<name>dds.transport.TCPv4.tcp1.create_function</name>
<value>NDDS_Transport_TCPv4_create</value>
</element>
<element>
<name>dds.transport.TCPv4.tcp1.parent.classid</name>
<value>NDDS_TRANSPORT_CLASSID_TCPV4_WAN</value>
</element>
<element>
<name>dds.transport.TCPv4.tcp1.public_address</name>
<value>$(PUBLIC_ADDRESS)</value>
</element>
<element>
<name>dds.transport.TCPv4.tcp1.server_bind_port</name>
<value>$(BIND_PORT)</value>
</element>
<element>
<name>dds.transport.TCPv4.tcp1.disable_nagle</name>
<value>1</value>
</element>
</value>
</property>
<discovery>
<initial_peers>
<element>$(REMOTE_RS_PEER)</element>
</initial_peers>
</discovery>
</domain_participant_qos>
</qos_profile>
</qos_library>
\end{lstlisting}
\subsubsection{Specify the domains to join and which transport to use}
这是将局域网中的 DDS 应用程序的数据转发到广域网的关键步骤。主要思想是定义两个不同的 Domain參与者来提供对不同网络的访问。
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterExampleWanTcpDomainRoute} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{Configuration of the DomainRoute to forward data over the WAN} %最终文档中希望显示的图片标题
\end{figure}
DomainLAN DomainPartant 被配置为加入domain 0,并使用默认的 UDPv4 LAN 和共享内存传输与站点 A LAN 上的应用程序进行通信。或者,将 DomainWAN DomainPartant 配置为domain 1 并使用 RTI TCP Transport 通过广域网进行通信。DomainWAN 是在不同位置与远程路由服务网关通信的网关 DomainPartant。
\lstset{language=XML}
\begin{lstlisting}
<domain_route name="DR_UDPLAN_TCPWAN">
<!--
With default participant QoS, which uses UDP LAN and Shared memory
as trasnports
-->
<participant name="DomainLAN">
<domain_id>0</domain_id>
</participant>
<participant name="DomainWAN">
<domain_id>1</domain_id>
<!--
With participant QoS configured to use the TCP transport. Requires
setting the variableS PUBLIC_ADDRESS AND BIND_PORT to the actual
values used in to route the traffic to this RS.
-->
<participant_qos base_name="QosLib::TcpWanProfile"/>
</participant>
</domain_route>
\end{lstlisting}
\subsubsection{Specify the Topics to be routed}
\lstset{language=XML}
\begin{lstlisting}
<session name="Session">
<auto_topic_route name="FromLANtoWAN">
<input participant="DomainLAN">
<deny_topic_name_filter>rti/*</deny_topic_name_filter>
</input>
<output participant="DomainWAN">
<deny_topic_name_filter>rti/*</deny_topic_name_filter>
</output>
</auto_topic_route>
<auto_topic_route name="FromWANtoLAN">
<input participant="DomainWAN">
<deny_topic_name_filter>rti/*</deny_topic_name_filter>
</input>
<output participant="DomainLAN">
<deny_topic_name_filter>rti/*</deny_topic_name_filter>
</output>
</auto_topic_route>
</session>
\end{lstlisting}
AutoTopicRoute FromLANtoWAN 配置为将来自 LAN 域的任何主题转发到 WAN 域。AutoTopicRoute 配置为将来自 WAN 域(连接到远程 LAN 域)的任何主题转发到本地 LAN 域。
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterExampleWanTcpAutoRoute} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{Definition of AutoTopicRoute to forward topics bidirectionally} %最终文档中希望显示的图片标题
\end{figure}
每个 AutoTopicRoute 都配置了输入和输出过滤器,以匹配任何主题。The difference between the AutoTopicRoutes is simply the domain assigned to the Input and Output–the DomainParticipant from which the input DataReader and output DataWriter will be created–.
\section{Controlling Data: Processing Data Streams}
转发过程是一个基本操作,包括将数据流从输入传播到输出。
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterControllingDataStreamForwarding} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{Basic forwarding of an input data stream} %最终文档中希望显示的图片标题
\end{figure}
在发布端,有 N 个DataWriter,每个 DataWriter 都为 Topic A 生成示例。路由服务具有一个 TopicRoute,其中包含一个输入 DataReader 和一个输出 DataWriter。在订阅端有 M 个DataReader,它们都接收来自Topic A'的示例。用户 DataWriters 在发布端生成的所有示例都由输入 DataReader 接收,然后通过输出 DataWriter 转发给订阅端的所有用户 DataReader。您可以观察到 TopicRoute 有一个组件,它执行转发逻辑,包括从输入 DataReader 读取和写入输出 DataReader。
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterControllingDataProcessor} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{Processor concept} %最终文档中希望显示的图片标题
\end{figure}
Processor 是一个可插入的组件,它允许您控制 TopicRoute 的转发过程。您可以根据系统集成的需要创建自己的 Processor 实现,定义自己的数据流,并在方便的时候处理数据流。
处理器从 TopicRoute 接收有关相关事件的通知,例如输入和输出的可用性、 TopicRoute 的状态或数据的到达。然后处理器可以对这些事件中的任何一个作出反应,并执行任何必要的操作。上面介绍的基本转发逻辑实际上是一个内置的 Processor 实现,并且在所有 TopicRoutes 中将其设置为默认值。
\subsection{DynamicData as a Data Representation Model}
路由服务的体系结构使得使用不同类型的数据流成为可能。这需要一个策略来处理编译和运行时的所有可能时间。这是通过 DynamicData 提供的。
DynamicData 是一个通用容器,通过保持数据的自定义和灵活的内部表示形式来保存任何类型的数据。DynamicData 是 Connext DDS 特定的特性,是核心库的一部分。
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterDataIntegrationDynData} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{DynamicData concept} %最终文档中希望显示的图片标题
\end{figure}
DynamicData 是一种类似容器的结构,它保存任何类型的数据。关于该类型外观的说明由 TypeCode 提供,TypeCode 是一种允许表示任何类型的结构。然后,使用 TypeCode 信息,DynamicData 对象可以包含关联类型的数据,其行为就好像它是此类型的实际结构一样。DynamicData 类具有访问数据成员和操作其内容的丰富接口。
\subsection{Aggregating Data From Different Topics}
一个非常常见的场景涉及定义路由路径,以将来自两个或多个输入 Topic 的数据组合成单个输出 Topic。这种模式称为主题聚合。
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterControllingShapesAggregator} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{Aggregation example of two Topics} %最终文档中希望显示的图片标题
\end{figure}
可以利用 Processor 组件来执行最适合您的系统需求的自定义 Topic 聚合。
\subsubsection{Develop a Custom Processor}
\lstset{language=C++}
\begin{lstlisting}
class ShapesAggregator : public rti::routing::processor::NoOpProcessor {
void on_data_available(rti::routing::processor::Route &);
void on_output_enabled(
rti::routing::processor::Route &route,
rti::routing::processor::Output &output);
...
}
\end{lstlisting}
\begin{itemize}
\item[$\bullet$] on\_output\_enabled: 通知已启用输出并可以写入该输出。在我们的示例中,我们创建一个输出类型(ShapeType)的缓冲区,该缓冲区将保存输入示例的聚合内容。
\end{itemize}
\begin{itemize}
\item[$\bullet$] on\_data\_available: 指示至少有一个输入具有可读数据。在我们的示例中,这是聚合逻辑发生的地方,它将简单地生成包含与 Square 样本相同值的聚合输出样本,但字段 y 除外,它是从 Circle 获得的。
\end{itemize}
\subsubsection{Create a Shared Library}
\subsubsection{Define a Configuration with the Aggregating TopicRoute}
\subsubsubsection{Configure a plugin library}
在 XML 配置的根元素中,您可以定义一个插件库元素,该元素包含路由服务可以加载的所有插件的描述。
\lstset{language=XML}
\begin{lstlisting}
<plugin_library name="ShapesPluginLib">
<processor_plugin name="ShapesProcessor">
<dll>shapesaggregator</dll>
<create_function>
ShapesAggregatorPlugin_create_processor_plugin
</create_function>
</processor_plugin>
</plugin_library>
\end{lstlisting}
\subsubsubsection{Configure a Routing Service with the custom routing paths}
TopicRoute 中的关键元素是一个自定义处理器的规范,它指出 TopicRoute 应该使用我们插件的一个实例来处理路由的事件和数据:
\lstset{language=XML}
\begin{lstlisting}
<topic_route name="SquaresAndCirclestoTriangles">
<processor plugin_name="ShapesPluginLib::ShapesAggregator">
...
</processor>
<input name="Square" participant="domain0">
<topic_name>Square</topic_name>
<registered_type_name>ShapeType</registered_type_name>
<datareader_qos base_name="RsShapesQosLib::RsShapesQosProfile"/>
</input>
<input name="Circle" participant="domain0">
<topic_name>Circle</topic_name>
<registered_type_name>ShapeType</registered_type_name>
<datareader_qos base_name="RsShapesQosLib::RsShapesQosProfile"/>
</input>
<output name="Triangle" participant="domain1">
<topic_name>Triangle</topic_name>
<registered_type_name>ShapeType</registered_type_name>
</output>
</topic_route>
\end{lstlisting}
\subsection{Splitting Data From a single Topic}
另一种常见模式包括定义路由路径,以将来自输入 Topic 的数据分割成若干个输出 Topics另一种常见模式包括定义路由路径,以将来自输入 Topic 的数据分割成若干个输出 Topics。
这称为主题分割。您可以利用 Processor 组件来执行最适合您的系统需求的 Topic 分割。
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterControllingDataShapesSplitter} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{Splitting example of a Topic} %最终文档中希望显示的图片标题
\end{figure}
\subsubsection{Custom Processor implementation}
\subsubsection{Define a Configuration with the Splitting TopicRoute}
\lstset{language=XML}
\begin{lstlisting}<topic_route name="SquaresToCirclesAndTriangles">
<processor plugin_name="ShapesPluginLib::ShapesSplitter"/>
<input name="Square" participant="domain0">
<registered_type_name>ShapeType</registered_type_name>
</input>
<output name="Circle" participant="domain1">
<registered_type_name>ShapeType</registered_type_name>
</output>
<output name="Triangle" participant="domain1">
<registered_type_name>ShapeType</registered_type_name>
</output>
</topic_route>
\end{lstlisting}
\subsection{Periodic and Delayed Action}
处理器可以对影响 TopicRoutes 的某些事件做出反应。
\section{Configuration}
\subsection{Configuring Routing Service}
This chapter describes how to compose an XML configuration.
\subsection{XML Tags for Configuring RTI Routing Service}
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=0.7\textwidth]{RouterXmlDdsTag} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{Top-level Tags in the Configuration File} %最终文档中希望显示的图片标题
\end{figure}
\begin{figure}[H] %H为当前位置,!htb为忽略美学标准,htbp为浮动图形
\centering %图片居中
\includegraphics[width=1.0\textwidth]{1} %插入图片,[]中设置图片大小,{}中是图片文件名
\caption{Top-level Tags in the Configuration File} %最终文档中希望显示的图片标题
\end{figure}
\subsubsection{Routing Service Tag}
\subsubsubsection{Example: Specifying a configuration in XML}
\lstset{language=XML}
\begin{lstlisting}
<dds>
<routing_service name="EmptyConfiguration"/>
<routing_service name="ShapesDemoConfiguration">
<!--...-->
</routing_service>
</dds>
\end{lstlisting}
开启Routing Service:
\lstset{language=XML}
\begin{lstlisting}
$NDDSHOME/bin/rtiroutingservice \
-cfgFile file.xml -cfgName EmptyConfiguration
\end{lstlisting}
\subsubsection{Administration}
您可以创建可以远程控制路由服务的 Connext DDS 应用程序。< Administration > 标记用于启用远程管理并配置其行为。默认情况下,出于安全原因,路由服务中的远程管理是关闭的。配置文件中不需要远程管理部分。
启用远程管理后,路由服务将创建 DomainPartant、 Publisher、 Subscriber、 DataWriter 和 DataReader。这些实体用于接收命令和发送响应。您可以在 < Administration > 标记中使用 QoS 标记配置这些实体。下表列出了 < Administration > tag 中允许的标记。注意,< domain\_id > 标记是必需的。
\href{https://community.rti.com/static/documentation/connext-dds/6.1.1/doc/manuals/connext_dds_professional/services/routing_service/configuration.html#administration}{Administration Tag}
\subsubsection{Monitoring}
您可以创建 Connext DDS 应用程序,该应用程序可以远程监视路由服务的状态。
默认情况下,出于安全和性能原因,路由服务中的远程监视是关闭的。配置文件中不需要远程监视节。
启用远程监视后,Routing Service 将为数据发布创建一个 DomainPartant、一个 Publisher、五个 DataWriter (每种实体一个)和五个 DataWriter (每种实体一个)。您可以使用 < routing\_service > 下定义的 < monitor > 标记来配置这些实体的 QoS。使用 < routing\_service > 中的 < monitor > 标记指定的常规远程监视参数可以使用 < tity\_monitor > 标记在每个实体的基础上进行覆盖。
\href{https://community.rti.com/static/documentation/connext-dds/6.1.1/doc/manuals/connext_dds_professional/services/routing_service/configuration.html#monitoring}{Monitoring Tag}
\subsubsubsection{Monitoring Configuration Inheritance}
实体可以覆盖监视配置的三个元素:
\begin{itemize}
\item[$\bullet$] 状态发布期
\end{itemize}
\begin{itemize}
\item[$\bullet$] 统计采样期
\end{itemize}
\begin{itemize}
\item[$\bullet$] 历史统计窗口
\end{itemize}
这三个元素中的每一个都是继承的,可以使用 <entity\_monitoring> 标记独立地进行覆盖。
\href{https://community.rti.com/static/documentation/connext-dds/6.1.1/doc/manuals/connext_dds_professional/services/routing_service/configuration.html#monitoring-configuration-inheritance}{Entity Monitoring Tag}
Example: Overriding Publication Period
\lstset{language=XML}
\begin{lstlisting}
<routing_service name="MonitoringExample">
<monitoring>
<domain_id>55</domain_id>
<status_publication_period>
<sec>1</sec>
</status_publication_period>
<statistics_sampling_period>
<sec>1</sec>
<nanosec>0</nanosec>
</statistics_sampling_period>
</monitoring>
...
<domain_route>
<entity_monitoring>
<status_publication_period>
<sec>4</sec>
</status_publication_period>
</entity_monitoring>
...
</domain_route>
</routing_service>
\end{lstlisting}
\subsubsection{}
\end{document}