我希望节点可以从所有节点接收主题,但本身。
如果 如果您的相关主题的数据类型包含一个包含有关数据源的信息的属性,那么您可以使用该属性通过ContentFilteredTopic进行过滤。假设您的数据类型有一个字段 nodeId 标识您的节点,然后您可以使用ContentFilter表达式 nodeId <> %0 并将参数设置为您自己的参数 nodeId 。中间件将向DataReader提供所有更新,除了那些拥有您自己的更新 nodeId 。查看 DDS规范 更多细节。
nodeId
nodeId <> %0
鉴于您的应用程序想要忽略来自您自己节点的数据,我认为您的数据类型实际上需要它 nodeId 作为属性,因为显然这是与您的应用程序相关的信息。所以如果你现在还没有它,你可能需要添加它。
如果您不允许或不想在数据类型中添加此类字段,您还可以通过利用其他更复杂的机制 ignore_publication() 要么 ignore_participant() 方法。这些也在说明书中解释。如果你想走那条路,请告诉我你是否有疑问。
ignore_publication()
ignore_participant()
最后,API可能会有特定于供应商的扩展,为您提供更简单的方法来实现您的目标。例如,请参阅 如何让DataReader忽略属于同一DomainParticipant的DataWriter? 使用RTI产品的解决方案。