Hello
I'm looking at MQTT for a way to reliably deliver messages
between brokers (both directions), with message queuing when
the connection goes down. From other threads I read this is is
a covered use case, but I haven't found a way to configure it
correctly so some guidance would be helpful.
Scenario: server and clients run each a local MQTT broker
(mosquitto). Brokers in the clients are configured as bridges,
connecting to the server. Client configuration is below:
connection bridge_123
clientid client_123
address localhost:1883
topic mosquittodemo/test both 2
cleansession false
The broker in the server is not configured as bridge.
Server and clients can go offline at any time, and messages
should be queued locally when the connection is down. Messages
are sent in both directions. The server sends messages to a
given client by publishing on a topic only the client is
listening (not in the config above).
I'm running a server and client on different ports to test
the queuing when the connection is down. Then there are these
two cases:
1. I kill the broker on the server, and continue sending
messages to the client broker (which are queued). Then I
restart the broker on the server, and after the bridge is
reestablished the queued messages are delivered. So queuing
works when sending messages client -> server.
2. I kill the broker on the client, and continue sending
messages to the server broker (which should get queued). Then
I restart the broker on the client. The bridge is
reestablished but the old messages are not delivered. New
messages are delivered as expected.
So it seems the queuing is not working on the other side of
the bridge, on the broker that was not configured as a bridge.
Is my configuration wrong? Is this use case supported? Or
is my way of testing (killing brokers with kill -9 to simulate
a broken connection) that is not appropriate?
If it matters: I'm using mosquitto_sub and mosquitto_pub to
publish and subscribe to topics.
Thank you,
Marcelo