Unlike other middlewares, e.g. DDS used in ROS 2, iceoryx keeps things simple and offers basic Quality of Service (QoS) settings. The QoS settings are called options and can be used to optimize and tailor the communication.
The two most important settings are:
Option | Explanation |
---|---|
ServerOptions::requestQueueCapacity |
This enables servers to store n requests at the users side |
ClientOptions::responseQueueCapacity |
This enables clients to store n responses at the users side |
The ConsumerTooSlowPolicy
and QueueFullPolicy
are used to control the behavior for full queues. Since some
combinations would be contradicting, not all of them match to connect producer and consumer.
ConsumerTooSlowPolicy |
QueueFullPolicy |
Behavior | Connection |
---|---|---|---|
WAIT_FOR_CONSUMER |
BLOCK_PRODUCER |
Producer blocks and waits for consumers | ✅ |
WAIT_FOR_CONSUMER |
DISCARD_OLDEST_DATA |
Non-blocking producer | ✅ |
DISCARD_OLDEST_DATA |
DISCARD_OLDEST_DATA |
Non-blocking producer | ✅ |
DISCARD_OLDEST_DATA |
BLOCK_PRODUCER |
Not compatible, no connection established | ❌ |
Two criteria have to be fulfilled in order for a server and a client to be connected.
- Same
capro::ServiceDescription
- Matching
ConsumerTooSlowPolicy
andQueueFullPolicy
inServerOptions
/ClientOptions
The three most important settings are:
Option | Explanation |
---|---|
PublisherOptions::historyCapacity |
This enables late-joining subscribers to request the n last samples |
SubscriberOptions::queueCapacity |
Size of the subscriber queue where samples are stored at the user side |
SubscriberOptions::historyRequest |
The number of samples a late-joining subscriber will request from every offered publisher, should be equal or smaller than historyCapacity otherwise capped |
!!! warning In case of n:m communication, the history feature will not provide the overall last n samples based on delivery point in time!
The following two scenarios are examples of issues when using n:m together with the history feature:
1. Multiple publishers
The last n samples of every publisher are received. This means for m publishers in the worst
case m * n samples in random order, not in the order they were published on the topic.
2. Multiple publishers after the publisher called `stopOffer()` or is removed
The last n samples will never be received since they vanished. An arbitrary number of samples or nothing is received.
For more information about the options see the corresponding example [`iceoptions`](../../../iceoryx_examples/iceoptions/README.md).
!!! info
If the PublisherOptions::historyCapacity
is larger than SubscriberOptions::queueCapacity
and blocking behaviour
is active, late-joining subscribers will not receive the latest and greatest sample, effectively loosing some.
If requiresPublisherHistorySupport
is set, additionally to the matching criteria of server and client, there is a third one for publishers and subscribers:
- Same
capro::ServiceDescription
- Matching
ConsumerTooSlowPolicy
andQueueFullPolicy
inPublisherOptions
/SubscriberOptions
PublisherOptions::historyCapacity
> 0