OMG Data Distribution Service(DDS)规范解读-Part2

2.以数据为中心的订阅发布(DCPS)

2.2 平台无关模型(Platform Independent Model ,PIM)

2.2.2 平台无关模型(PIM)描述

2.2.2.2 Domain Module
  • DomainParticipant
  • DomainParticipantFactory
  • DomainParticipantListener
域参与者
域参与者工厂
域参与者监听器
DomainModule
DomainParticipant
DomainParticipantFactory
DomainParticipantListener
2.2.2.2.1 DomainParticipant 类
  1. 它充当所有其他Entity对象的容器。
  2. 它充当Publisher,Subscriber,Topic和MultiTopic Entity对象的工厂。
  3. 它表示应用程序在通信平面上的参与,该通信平面将在同一物理计算机上运行的应用程序彼此隔离。域建立“虚拟网络”,链接共享相同domainId的所有应用程序,并将它们与在不同域上运行的应用程序隔离。通过这种方式,独立的分布式应用程序可以在同一物理网络中共存,而不会干扰甚至了解彼此。
  4. 它在域中提供管理服务,允许应用程序在本地“忽略”与给定参与者(ignore_participant),发布(ignore_publication),订阅(ignore_subscription)或主题(ignore_topic)有关的任何信息。
  5. 在基类级别定义的方法,即set_qos,get_qos,set_listener,get_listener和enable。
  6. 工厂方法:create_topic,create_publisher,create_subscriber,delete_topic,delete_publisher,delete_subscriber
  7. 访问状态的方法:get_statuscondition

DomainParticipant 实现的所有方法:

  1. create_publisher:此方法将创建具有所需QoS策略的Publisher,并将指定的PublisherListener附加到该Publisher。创建的Publisher隶属于作为其工厂的DomainParticipant。
  2. delete_publisher:此方法将删除现有的Publisher。如果Publisher还有需要管理的DataWriter对象,则无法将该Publisher删除(返回PRECONDITION_NOT_MET),只能删除同DomainParticipant对象下的。
  3. create_subscriber:此方法将创建具有所需QoS策略的Subscriber,并将指定的SubscriberListener附加到该Subscriber。
  4. delete_subscriber:此方法将删除现有的Subscriber。如果Subscriber还有需要管理的DataReader对象,则无法将该Subscriber删除(返回PRECONDITION_NOT_MET),只能删除同DomainParticipant对象下的。
  5. create_topic创建具有所需QoS策略的Topic,并将指定的TopicListener附加到该Topic。
  6. delete_topic:此方法将删除一个Topic。如果还有存在的DataReader,DataWriter,ContentFilteredTopic或MultiTopic需要使用该Topic,则无法将该Topic删除(返回PRECONDITION_NOT_MET),只能删除同DomainParticipant对象上下的。。
  7. create_contentfilteredtopic:此方法将创建一个ContentFilteredTopic。ContentFilteredTopic可用于实现基于内容的订阅。订阅的相关主题是通过related_topic参数指定的(有关联的topic,然后根据想要的内容进行过滤)。ContentFilteredTopic仅与在该主题下发布的数据样本有关系,并根据其内容进行过滤。
  8. delete_ contentfilteredtopic
  9. create_multitopic:MultiTopic可用于订阅多个主题,并将接收的数据组合/过滤为作为结果的类型。MultiTopic提供了基于内容的订阅机制。
  10. create_multitopic
  11. find_topic:find_topic方法使用Topic的名称和timeout作为参数,可根据参数传入的名称访问现有(或准备存在)的主题。有同名的就返回,没有的话就阻塞。通过find_topic获取的主题必须通过delete_topic删除,确保释放本地资源。
  12. lookup_topicdescription:将TopicDescription的name作为参数,根据参数传入的名称访问现有的本地创建的TopicDescription。有同名的就返回,没有的就返回nil,不阻塞。仅在本地创建的主题中搜索。因此,它永远不应该创建新的TopicDescription。
  13. get_builtin_subscriber:每个DomainParticipant都有很多built-in topic,以及相应的DataReader对象来访问这些Topic对象。(内置主题用于传递有关其他DomainParticipant,Topic,DataReader和DataWriter对象的信息)
  14. ignore_participant:允许应用程序指导中间件服务在本地忽略远程域参与者,服务将在本地运行,就好像远程参与者不存在一样。这意味着它将忽略源自该域参与者的任何主题,发布或订阅。
  15. ignore_topic:允许应用程序指导中间件服务在本地忽略主题,意味着它将在本地忽略某一主题的任何发布或订阅操作。
  16. ignore_publication:允许应用程序指导中间件服务在本地忽略远程发布; 发布由主题名称、用户数据与Publisher设置的分块的关联定义(请参阅2.2.5中的“DCPSPublication”内置主题)。在此调用之后,服务将忽略与该发布有关的任何数据。
  17. ignore_subscription:允许应用程序指导中间件服务在本地忽略远程订阅; 订阅由主题名称、用户数据与Subscriber设置的分块的关联定义(请参阅2.2.5中的“DCPSSubscription”内置主题)。 在此调用之后,服务将忽略与该订阅有关的任何数据。
  18. delete_contained_entities:将删除通过DomainParticipant的“create”方法创建的所有实体,即删除所有包含的Publisher,Subscriber,Topic,ContentFilteredTopic和MultiTopic实体对象。
  19. assert_liveliness:与LIVELINESS QoS策略配合使用,以向服务提示实体处于活动状态。只有在应用程序不定期写入数据时才需要使用assert_liveliness。
  20. set_default_publisher_qos:设置发布者QoS策略的默认值,在调用create_publisher方法时作为默认QoS策略用于新创建的发布者(Publisher)实体。
  21. get_default_publisher_qos:获取发布者(Publisher)QoS的默认值,即在create_publisher方法使用默认QoS策略的情况下,用于新创建的发布者(Publisher)实体的QoS策略。
  22. set_default_subscriber_qos:设置订阅者(Subscriber)QoS策略的默认值,在调用create_subscriber方法时作为默认QoS策略用于新创建的订阅者(Subscriber)实体。
  23. get_default_subscriber_qos:获取订阅者(Subscriber)QoS的默认值,即在create_subscriber方法使用默认QoS策略的情况下,用于新创建的订阅者(Subscriber)实体的QoS策略。
  24. set_default_topic_qos:设置主题(Topic)QoS策略的默认值,在调用create_topic方法时作为默认QoS策略用于新创建的主题(Topic)实体。
  25. get_default_topic_qos:获取主题(Topic)QoS的默认值,即在create_topic方法使用默认QoS策略的情况下,用于新创建的主题(Topic)实体的QoS策略。
  26. get_domain_id获取用于创建DomainParticipant对象的domain_id
  27. get_discovered_participants:此方法获取已在域中发现的DomainParticipants列表,并且应通过DomainParticipant ignore_participant方法“忽略”应用程序未加入的域。
  28. get_discovered_participant_data:获取在网络上发现的DomainParticipant的有关信息。
  29. get_discovered_topics:获取已在域中发现的主题列表,并且应通过DomainParticipant ignore_topic方法“忽略”应用程序未创建的主题列表。
  30. get_discovered_topic_data:获取在网络上发现的主题的有关信息。
  31. contains_entity:检查给定的a_handle是否为该DomainParticipant创建
  32. get_current_time:返回当前时间值,辅助服务对需要发布的数据加时间戳,并为其接收的数据设置接收时间戳。
2.2.2.2.2 DomainParticipantFactory 类

此类的唯一目的是创建和销毁DomainParticipant对象。

  1. create_participant:创建一个DomainParticipant,这个DomainParticipant加入当前Domainid所处的域
  2. delete_participant将删除现有的DomainParticipant
  3. get_instance:返回DomainParticipantFactory单例
  4. lookup_participant:此方法获取之前创建的属于特定domain_id的DomainParticipant对象。
  5. set_default_participant_qos:设置DomainParticipant QoS策略的默认值,在调用create_participant方法时作为默认QoS策略用于新创建的DomainParticipant实体。
  6. get_default_participant_qos:获取DomainParticipant QoS的默认值,即在create_participant方法使用默认QoS策略的情况下,用于新创建的DomainParticipant的QoS策略。
  7. set_qos:设置DomainParticipantFactory QoS策略的值。这些策略控制实体的工厂对象的行为。
    请注意,尽管具有QoS,但DomainParticipantFactory不是实体。
  8. get_qos:返回DomainParticipantFactory QoS策略的值。
2.2.2.2.3 DomainParticipantListener 接口

这是一个可以由应用程序提供的类实现的接口,该接口需要向DomainParticipant注册,以便DCPS服务可以向应用程序通知相关状态的更改。

Domain Module的总结

在这里插入图片描述

2.2.2.3 Topic-Definition Module

由以下类组成:
• TopicDescription
• Topic
• ContentFilteredTopic
• MultiTopic
• TopicListener
• TypeSupport

2.2.2.3.1 TopicDescription Class

是Topic,ContentFilteredTopic和MultiTopic的基类。
topicdescription
有两个属性:name和type_name; name用来本地检索,type_name
方法get_participant:此方法返回TopicDescription所属的DomainParticipant。

2.2.2.3.2 Topic 类

主题(Topic)类是要发布和订阅数据的最基本描述方式。
由name进行标识,是域内唯一的,此外(通过扩展TopicDescription)它完全指定了在发布或订阅主题(Topic)时可以传达的数据类型。
Topic是唯一可用于发布的TopicDescription,因此与DataWriter相关联。

2.2.2.3.2 ContentFilteredTopic类

允许基于内容的订阅:这种情况下订阅者不一定要收到此主题(Tpic)下发布的每个实例的内容。相反,订阅者只想接收内容满足特定条件的值。通过使用参数为expression_parameters的filter_expression属性完成基于内容的选择。

2.2.2.3.3 MultiTopic类

允许订阅方组合/过滤/重新排列来自多个主题的数据。
MultiTopic允许一种更复杂的订阅场景,这种场景下订阅方可以选择同时订阅多个主题的数据,并将从多个主题接收的数据组合成单个结果类型(由继承的type_name指定)。然后根据参数为expression_parameters的subscription_expression属性,对这些数据进行过滤(选择)甚至重新排列(聚合/投影)。

2.2.2.3.4 TopicListener接口

Topic也是一种实体,也会关联上Listener

2.2.2.3.5 TypeSupport接口

TypeSupport接口是一个抽象接口;
此接口要求DDS服务的实现方提供自动的方法,该方法通过类型的描述生成此类型特定的类(例如在OMG IDL映射中使用IDL)。必须先在此类型特定的类上使用register_type方法注册TypeSupport,然后才能使用它创建Topic对象。
1.register_type:允许应用程序告知DDS服务其存在的数据类型。该方法的实现包含了需要传递给中间件的所有知识,使得中间件能够管理该数据类型的数据内容。实现还特别地包含了允许DDS服务区分相同类型的不同实例的关键字(Key)定义。有错误会返回一些错误代码。
2.get_type_name:返回TypeSupport代表的数据类型的默认名称。

猜你喜欢

转载自blog.csdn.net/weixin_42299076/article/details/129690090