03/22/2022
I could use some help to understand delivery guarantees, thank you.
Assuming an underlying data source for an OPC UA server that is sampled already, i.e. the assumed use case is that every value the OPC UA server receives from the underlying system shall be sent to the client. The OPC UA server shall not do any sampling. Is this a valid use case for OPC UA client/server? A sort of a QoS1 in MQTT – deliver every change at least once. I see a possible solution using DA to stream data, and periodic HA to recover any missed data.
In an OPC UA server/client setup it is my understanding that the client will create a monitored item with a publishing interval and a queue size++. If the queue runs over before the publishing interval then values goes missing from the front or back. So if there are intermittent data flow issues resulting in a larger than normal update rate some values are lost. The queue size is the only and intended configuration to handle peaks in update rate from underlying systems? Â
OPC UA PubSub with MQTT offers more control with ack/nack on messages but experience shows that brokers and client libraries has some quality issues for handling ack/nack properly. Are there initiatives looking at adding AMQP/NATS/Kafka or similar where ack/nack is more “visible”?
05/30/2017
The QueueSize can be set to whatever size is needed to ensure no data loss during transients.
Some servers may support durable subscriptions which ensure data is not lost even if the client goes offline:
https://reference.opcfoundatio…..5/docs/6.8
That said, clients are constrained by the limits of the server. A UA server running on low end PLC is will not support durable subscriptions nor will it allow for excessively large queue sizes. A UA server running on a PC class machine could support this.
It is worth remembering that MQTT QoS requires that the messages be stored somewhere and you had a low-end PLC running MQTT it would run into the same RAM and storage issues that affect the UA server implementation. The main advantage is UA allows servers to tell clients, in advance, what it can support so the client can compensate. Using MQTT with QoS would simply fail at runtime and you would never really know why.
1 Guest(s)