To determine which multicast addresses will be used to send the data, the middleware evaluates a set of filters that are configured for the DDS.DataWriter. Each filter "guards" a channel (a set of multicast addresses). Each time a multi-channel DDS.DataWriter writes data, the filters are applied. If a filter evaluates to true, the data is sent over that filter's associated channel (set of multicast addresses). We refer to this type of filter as a Channel Guard filter.
The DDS.MultiChannelQosPolicy is propagated along with discovery traffic. The value of this policy is available in DDS.PublicationBuiltinTopicData.locator_filter.
For more information on Multi-channel DataWriters, refer to the User's Manual.
If any of the guard filters are based on non-key fields, RTI Connext only guarantees reception of the most recent data from the MultiChannel DataWriter.
The protocol parameters described in DDS.DataWriterProtocolQosPolicy are applied per channel, with the following exceptions:
DDS.RtpsReliableWriterProtocol_t.low_watermark and DDS.RtpsReliableWriterProtocol_t.high_watermark: The low watermark and high watermark control the queue levels (in number of samples) that determine when to switch between regular and fast heartbeat rates. With MultiChannel DataWriters, high_watermark and low_watermark refer to the DataWriter's queue (not the reliability channel queue). Therefore, periodic heartbeating cannot be controlled on a per-channel basis.
Important: With MultiChannel DataWriters, low_watermark and high_watermark refer to application samples even if batching is enabled. This behavior differs from the one without MultiChannel DataWriters (where low_watermark and high_watermark refer to batches).
DDS.RtpsReliableWriterProtocol_t.heartbeats_per_max_samples: This field defines the number of heartbeats per send queue. For MultiChannel DataWriters, the value is applied per channel. However, the send queue size that is used to calculate the a piggyback heartbeat rate is defined per DataWriter (see DDS.ResourceLimitsQosPolicy.max_samples)
Important: With MultiChannel DataWriters, heartbeats_per_max_samples refers to samples even if batching is enabled. This behavior differs from the one without MultiChannels DataWriters (where heartbeats_per_max_samples refers to batches).
With batching and MultiChannel DataWriters, the size of the DataWriter's send queue should be configured using DDS.ResourceLimitsQosPolicy.max_samples instead of max_batches DDS.DataWriterResourceLimitsQosPolicy.max_batches in order to take advantage of heartbeats_per_max_samples.