我的OpenDDS节点既是DataDriver又是DataReader。结果是,如果节点发送主题,则从同一节点接收相同的主题。
是否存在避免此行为的QoS策略?我希望节点可以从所有节点接收主题,但本身。
答案 0 :(得分:1)
我希望节点可以从所有节点接收主题,但本身。
如果您处于相关主题的数据类型包含包含有关数据源的信息的属性的情况,则可以使用该属性通过ContentFilteredTopic进行过滤。假设您的数据类型包含标识您的节点的字段nodeId
,那么您可以使用类似nodeId <> %0
的ContentFilter表达式,并将参数设置为您自己的nodeId
。中间件将向您的DataReader提供所有更新,但具有您自己的nodeId
的更新除外。查看the DDS specification了解详情。
鉴于您的应用程序想要忽略来自您自己节点的数据,我认为您的数据类型实际上需要nodeId
作为属性,因为这显然是与您的应用程序相关的信息。所以如果你现在还没有它,你可能需要添加它。
如果您不允许或不想在数据类型中添加此类字段,您还可以通过利用ignore_publication()
或ignore_participant()
方法使用其他更复杂的机制。这些也在说明书中解释。如果你想走这条路,请告诉我你是否有疑问。
最后,API可能会有特定于供应商的扩展,为您提供更简单的方法来实现您的目标。例如,请参阅How do I get a DataReader to ignore a DataWriter that belongs to the same DomainParticipant?了解使用RTI产品的解决方案。