ZBLOG

3.2.1. DomainParticipant A DomainParticipant is the entry point of the application to a domain. Every DomainParticipant is linked to a single domain from its creation, and contains all the Entities related to that domain. It also acts as a factor...

这段文字详细描述了 DomainParticipant 的作用以及其配置方式,特别是在分布式系统中如何通过质量服务(QoS)策略来控制参与者的行为。以下是对内容的逐步解析:

1. DomainParticipant 的角色

  • 入口点DomainParticipant 是应用程序与域之间的入口,每个参与者都链接到一个特定的域,并且包含与该域相关的所有实体。
  • 工厂角色:它还充当发布者(Publisher)、订阅者(Subscriber)和主题(Topic)的工厂,即可以创建这些对象。

2. QoS 值与 DomainParticipantQos

  • QoS 控制DomainParticipantQos 用于控制 DomainParticipant 的行为,允许开发者设置或修改不同的 QoS 策略。
  • 可修改性
    • 在创建 DomainParticipant 时可以指定 QoS 值,或者之后使用 DomainParticipant::set_qos() 方法进行修改。

3. DomainParticipantListener

  • 作为一个实体,DomainParticipant 接受一个 DomainParticipantListener,用以接收关于该实例状态变化的通知。这使得应用程序能够对参与者的状态变化做出反应。

4. DomainParticipantQos 内部结构

内部包含多个 QoSPolicy 对象,每个政策影响着参与者的特定方面:

QosPolicy 类 访问/修改方法 可变性
UserDataQosPolicy user_data()
EntityFactoryQosPolicy entity_factory()
ParticipantResourceLimitsQos allocation()
PropertyPolicyQos properties()
WireProtocolConfigQos wire_protocol() 否*
TransportConfigQos transport() 和 setup_transports()
FlowControllersQos flow_controllers()

注意事项

  • WireProtocolConfigQos 中,唯一可变字段是 m_DiscoveryServers。这是用于运行时动态修改远程服务器列表的重要信息。
  • 当调用 create_participant() 方法时,如果 Fast DDS 开启了统计支持,则输入的 DomainParticipantQos 和内部生成的可能会有所不同。因此,如果需要在创建后进一步修改,需要先获取当前内部的 QoS 配置,然后进行相应调整。

示例代码解释

// 创建一个具有默认 QoS 的 DomainParticipant 实例
DomainParticipant* participant =
        DomainParticipantFactory::get_instance()->create_participant(0, PARTICIPANT_QOS_DEFAULT);
if (nullptr == participant)
{
    // 错误处理
    return;
}

// 获取当前 QoS 或从头开始创建一个新的 QoS 配置
DomainParticipantQos qos = participant->get_qos();

// 修改 QoS 属性,例如设置自动启用创建实体为 false
qos.entity_factory().autoenable_created_entities = false;

// 将新的 QoS 分配给参与者对象
participant->set_qos(qos);
  1. 实例化:首先,通过工厂模式创建一个默认配置下的 DomainParticipant 实例。
  2. 错误检查:确保实例成功创建,否则处理错误情况。
  3. 获取当前 QoS 设置:检索当前成员变量中的 QoS 设置,以便进行更改。
  4. 修改属性:在此示例中,将“自动启用已创建实体”属性设置为 false,这意味着新创建的实体不会自动被启用。
  5. 应用新设置:最后,将更新后的 QoS 设置应用到参与者实例中。

总之,这段文字和示例代码提供了如何使用 DomainParticipant 和其相关属性、方法来管理分布式通信中的数据流动,以及如何根据具体需求自定义其行为。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=6995

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?