On 1 Jul 2021, at 20:58, Esteban Maringolo <emaringolo@gmail.com> wrote:
Hi Sven,
Thanks, now I understand better the use of QoS and session ID with a practical use case.
How do you deal with the lifetime of each "listener" (subscriber) on each image? I mean, how stable is it?
E.g. MQTTClient new open; subscribeToTopic: '/updates'; runWith: [ :message | Transcript cr; show: '[UPDATED]'; space; show: message contents asString; cr. ]; yourself.
You just fork that and it will continue to receive messages until you close the connection?
Basically, yes.
Is there a watchdog class/library to ensure things like this continue working? (I'm used to having my images living for months sometimes).
I have an MQTTListener class that wraps the MQTT client and its process, the process's run method looks like this: run [ self log: 'Starting MQTT reading'. self ensureMQTTClient ifTrue: [ mqttClient runWith: [ :message | self handleMessage: message ] ]. self log: 'End of MQTT reading, restarting in 5s'. self closeMQTTClient. 5 seconds wait ] repeat It is a bit crude but it does help to restore the connection when the broker becomes temporarily unavailable.
Thanks in advance.
Regards!
Esteban A. Maringolo
On Wed, Jun 30, 2021 at 5:00 AM Sven Van Caekenberghe <sven@stfx.eu> wrote:
On 30 Jun 2021, at 01:28, Esteban Maringolo <emaringolo@gmail.com> wrote:
I like the Ansible approach using RabbitMQ, in particular because it would also work to delegate tasks to workers (even if in the same image), and the task queue would be preserved, whilst in MQTT if there are no subscribers for a topic, then all messages sent to it are discarded.
That is correct but less of a problem in practice than it seems to be at first sight.
As a client, you normally have to be able to start from scratch and load everything that came before the moment you start up.
When a client with a specific ID has connected once with clean session false, QoS 1 and a subscription, the persistence of the queue will be enabled for a as long as the server lives (and maybe even beyond restarts).
There is absolutely no question that Rabbit MQ has much more functionality, I found Mosquitto MQTT very nice to work with, but as always, YMMV.
Sven