16.3.5 Isolating DomainParticipants and Endpoints from Each Other
There are several ways to prevent Entities from communicating with each other:
- Domain IDs physically isolate entire applications (and their DomainParticipants) from each other. See 16.3.4 Choosing a Domain ID and Creating Multiple DDS Domains.
- Domain tags enable you to logically subdivide domains, isolating them from each other. Domain tags cannot be changed after creating the DomainParticipant. See 16.3.5.1 Choosing a Domain Tag.
- DomainParticipant partitions enable you to have different visibility planes for a given pair of domain ID and domain tag. Only DomainParticipants with at least one matching partition can communicate with each other. Membership in a partition can be dynamically changed. See 44.6 PARTITION QosPolicy.
- DomainParticipant-ignoring API. The API DomainParticipant::ignore_participant can be used to ignore a remote DomainParticipant at the application level. See 27.1 Ignoring Specific Remote DomainParticipants.
- Endpoint (DataWriter/DataReader) partitions enable you to have different visibility planes at the Publisher/Subscriber level. A DataWriter will not see a DataReader unless their corresponding Publisher or Subscriber has at least one matching partition. Membership in a partition can be dynamically changed. See 44.6 PARTITION QosPolicy.
- Endpoint-ignoring APIs. The APIs DomainParticipant::ignore_publication and DomainParticipant::ignore_subscription can be used to ignore remote endpoints at the application level. See 27.2 Ignoring Publications and Subscriptions.
Table 16.4 Isolating, Partitioning, and Filtering Information provides a comprehensive comparison of these different methods and specifically addresses what, if any, discovery traffic is reduced or eliminated.
Table 16.4 Isolating, Partitioning, and Filtering Information
Concept |
Description |
Isolates Participant Discovery Traffic |
Isolates Endpoint Discovery Traffic |
Isolates Endpoint Communication |
Changeable |
---|---|---|---|---|---|
Domain ID |
Hard databus isolation |
Yes |
Yes |
Yes |
No |
Domain tag |
Logical databus isolation |
No |
Yes |
Yes |
No |
DomainParticipant partition |
Participant visibility planes |
No |
Yes |
Yes |
Yes |
Ignore-participant API |
Application-level isolation for DomainParticipants |
No |
Yes |
Yes |
No (the action cannot be undone) |
Endpoint (writer/reader) partition |
Endpoint visibility planes |
No |
No |
Yes |
Yes |
Ignore-endpoint API |
Application-level isolation for endpoints |
No |
No |
Yes |
No (the action cannot be undone) |
Legend:
- Isolates Participant Discovery Traffic. Participants do not exchange RTPS participant DATA submessages or authenticate with each other (see 22.1 Simple Participant Discovery).
- Isolates Endpoint Discovery. Participants do not exchange RTPS publication DATAs and subscription DATAs submessages (see 22.3 Simple Endpoint Discovery).
- Isolates Endpoint Communication.There is no RTPS traffic sent between endpoints.
In addition to isolating entities, you can configure a DataReader to receive only a subset of the data published by a matching DataWriter, based on the content of the data, using ContentFilteredTopics (see 18.3 ContentFilteredTopics) or based on the frequency of the data using time-based filters (see 48.4 TIME_BASED_FILTER QosPolicy).