DDS(Data Distribution Service)————Publisher(4) DataWriterQos的DeadlineQosPolicy与LivelinessQosPolicy详解

DDS(Data Distribution Service)————Publisher(4) DataWriterQos的DeadlineQosPolicy与LivelinessQosPolicy详解

5.3.2.3 DeadlineQosPolicy

DeadlineQosPolicy 是DDS(Data Distribution Service)中的一种质量服务(QoS)策略,用于管理数据传输的时间约束。它定义了在特定时间间隔内,数据发布者(DataWriter)应向数据订阅者(DataReader)提供新数据的约束条件。该策略确保系统在时间敏感应用中保持数据的新鲜度和一致性。

​ 其作用原理,就是接收方有一个定时器,当在这个时间内没有收到新的Data时,就会触发DataReader的Linstener,通过回调函数进行业务处理。

DeadlineQosPolicy 的属性是由数据类型eprosima::fastrtps::Duration_t 组成的

C + + 使用 {\color{green}C++使用} C++使用

	DeadlineQosPolicy deadline;
    
    /*  create function 1 */
    eprosima::fastrtps::Duration_t deadLineTime = eprosima::fastrtps::Duration_t(5,0);

    deadline.period = deadLineTime;

    /*  create function 1 */
    deadline.period.seconds = 5U;
    deadline.period.nanosec = 0U;


    dataWriterQos.deadline(deadline);

X M L 使用 {\color{green}XML使用} XML使用

<data_writer profile_name="writer_xml_conf_deadline_profile">
    <qos>
        <deadline>
            <period>
                <sec>1</sec>
                <nanosec>0</nanosec>
            </period>
        </deadline>
    </qos>
</data_writer>

<data_reader profile_name="reader_xml_conf_deadline_profile">
    <qos>
        <deadline>
            <period>
                <sec>1</sec>
                <nanosec>0</nanosec>
            </period>
        </deadline>
    </qos>
</data_reader>
5.3.2.4 LivelinessQosPolicy

LivelinessQosPolicy 是DDS(Data Distribution Service)中的一种QoS策略,用于确保参与者(participant)、发布者(publisher)和订阅者(subscriber)之间的连接保持活跃,监控它们的存活状态。通过这个策略,DDS可以检测出发布者和订阅者是否在指定时间内保持活跃,从而采取适当的动作。

L i v e l i n e s s Q o s P o l i c y 的作用 {\color{blue}LivelinessQosPolicy 的作用} LivelinessQosPolicy的作用

LivelinessQosPolicy 的主要作用是保证系统中各个实体在预定时间内保持活跃,并通知订阅者在发布者不再活跃时采取相应的措施。具体作用包括:

  1. 发布者存活监控:确保数据发布者(DataWriter)在规定的时间内进行声明,表明它依然活跃。
  2. 订阅者通知:当发布者在规定时间内未声明存活时,订阅者(DataReader)会收到通知。
  3. 资源管理:有助于资源的有效管理和及时回收。

L i v e l i n e s s Q o s P o l i c y 的属性 {\color{blue}LivelinessQosPolicy 的属性} LivelinessQosPolicy的属性

LivelinessQosPolicy 包含两个主要属性:

  1. kind
    • 表示发布者如何声明它们的活跃状态。有以下几种类型:
      • AUTOMATIC_LIVELINESS_QOS: 系统自动管理存活状态。
      • MANUAL_BY_PARTICIPANT_LIVELINESS_QOS: 通过参与者声明存活。
      • MANUAL_BY_TOPIC_LIVELINESS_QOS: 通过具体的主题声明存活。
  2. lease_duration
    • 表示声明活跃的时间间隔。发布者需要在这个时间间隔内声明存活,否则系统会认为它不再活跃。 其实也就是最后一次确认的间隔,若大于这个间隔则认为是失活 {\color{red}其实也就是最后一次确认的间隔,若大于这个间隔则认为是失活} 其实也就是最后一次确认的间隔,若大于这个间隔则认为是失活
    • 类型为 Duration_t
  3. announcement_period
    • 由DataWriter发送的连续活动消息之间的时间间隔 当 k i n d 的类型为 A U T O M A T I C L I V E L I N E S S Q O S 或者 M A N U A L B Y P A R T I C I P A N T L I V E L I N E S S Q O S 时, a n n o u n c e m e n t p e r i o d 要小于 l e a s e d u r a t i o n n {\color{red}当kind的类型为AUTOMATIC_LIVELINESS_QOS或者MANUAL_BY_PARTICIPANT_LIVELINESS_QOS时,announcement_period 要小于 lease_durationn} kind的类型为AUTOMATICLIVELINESSQOS或者MANUALBYPARTICIPANTLIVELINESSQOS时,announcementperiod要小于leasedurationn
5.3.2.4.1 LivelinessQosPolicyKind

​ 在DDS(Data Distribution Service)中,LivelinessQosPolicyKind 定义了发布者(DataWriter)声明其存活状态的方式。通过设置不同的 LivelinessQosPolicyKind,可以控制发布者如何以及何时向订阅者(DataReader)声明其存活状态。

  1. AUTOMATIC_LIVELINESS_QOS

定义

  • 系统自动管理发布者的存活声明。
  • 发布者无需显式地声明其存活状态,DDS 会自动处理。

机制

  • DDS 内部机制会周期性地发送信号,以保证订阅者知道发布者是活跃的。
  • 这种方式适用于对实时性要求不高的场景,因为系统自动处理带来了额外的延迟和不确定性。

使用场景

  • 适用于简单的系统或非实时要求的应用。
  • 减少了开发者的工作量,因为系统自动管理存活状态。
  1. MANUAL_BY_PARTICIPANT_LIVELINESS_QOS

定义

  • 参与者(DomainParticipant)显式声明其所有发布者的存活状态。
  • 发布者通过其所属的参与者共同声明存活状态。

机制

  • 通过调用 DomainParticipantassert_liveliness() 方法或者通过发送消息隐式的声明存活状态。
  • 一次声明将更新所有隶属于该参与者的发布者的存活状态。

使用场景

  • 适用于多个发布者共用一个参与者的场景。
  • 有助于减少系统负载,因为一个声明可以更新多个发布者的状态。

3. MANUAL_BY_TOPIC_LIVELINESS_QOS

定义

  • 每个发布者(DataWriter)独立声明其存活状态。
  • 发布者通过显式调用自身的 assert_liveliness() 方法来声明存活状态。

机制

  • 通过调用发布者的 assert_liveliness() 方法或者通过发送消息隐式的来声明存活状态。
  • 每个发布者独立管理其存活声明,不依赖于参与者或其他发布者。

使用场景

  • 适用于对存活状态有严格要求的实时系统。
  • 有助于精细控制每个发布者的存活状态。

D a t a W r i t e r 与 D a t a R e a d e r 之间的兼容性保障: {\color{red}DataWriter与DataReader之间的兼容性保障:} DataWriterDataReader之间的兼容性保障:

  • DataWriterkind级别应该大于等于 DataReaderkind级别

  • 并且不同种类之间的顺序为:

    |AUTOMATIC_LIVELINESS_QOS-api| < |MANUAL_BY_PARTICIPANT_LIVELINESS_QOS-api| < |MANUAL_BY_TOPIC_LIVELINESS_QOS-api|

  • 以下列出了相关的可能性:

在这里插入图片描述

5.3.2.4.2 LivelinessQosPolicy使用示例

C + + {\color{green}C++} C++

  	Templater tempurate = {1,15};

    LivelinessQosPolicy liveLinessQos;
    
    /*  setting LivelinessQosPolicy  */
    liveLinessQos.kind = MANUAL_BY_TOPIC_LIVELINESS_QOS;
    liveLinessQos.lease_duration = {10,0};
    liveLinessQos.announcement_period = {5,0};

    dataWriterQos.liveliness(liveLinessQos);

    /* keep alive by senting data value */
    
    datawriter->write(&tempurate);

    /*  keep alive by api */

    datawriter->assert_liveliness();

X M L {\color{green}XML} XML

<data_writer profile_name="writer_xml_conf_liveliness_profile">
    <qos>
      <liveliness>
	<announcement_period>
	  <sec>0</sec>
	  <nanosec>1000000</nanosec>
	</announcement_period>
        <lease_duration>
          <sec>1</sec>
        </lease_duration>
	<kind>AUTOMATIC</kind>
      </liveliness>
    </qos>
</data_writer>

<data_reader profile_name="reader_xml_conf_liveliness_profile">
    <qos>
        <liveliness>
            <lease_duration>
                <sec>1</sec>
            </lease_duration>
	    <kind>AUTOMATIC</kind>
        </liveliness>
    </qos>
</data_reader>
  • 39
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值