Details
-
Improvement
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
None
-
None
-
None
Description
Using the router in the EnMasse project and looking into the MQTT specification we have the following problem on the current EnMasse implemetation.
The MQTT specification says the following ...
Let's imagine that a client is connected to the broker with client id "1234" and that another client tries to connect with same client id. The broker will shut down the connection with first client opening the new one.
Now with our MQTT support, the MQTT gateway can run as multiple instances (multiple pods) so this check can't be executed by the gateway locally because a client "1234" could connect to MQTT GW-1 and another client (always "1234") could connect to the MQTT GW-2 and the gateways don't know about each other. The common point they have is the router network inside EnMasse and the fact that for each MQTT client a new AMQP connection is created on the other side attaching a link with this name : $mqtt.to.<client-id>
The following idea came ...
If during the connection we use a container-id that is equals to the client-id, could the router have a feature for detecting connections with same container-id and providing a way to close the previous ones ?
It should be an information shared (and cached ?) by routers in their inter-router protocol.
If not at connection level, maybe at link attachment level ? (when two clients attach to the same $mqtt.to.<client-id> link)