Seleccionar página

Cuando subscribimos un cliente MQTT contra ActiveMQ Artemis, definiendo un topic y un clientId, el mapeo en Artemis es una queue con el nombre «clientId.topic» dentro del address con el nombre del topic.


Por ejemplo, supongamos que hemos creado un address llamado amq.test, si nos subscribimos especificando dicho address como topic y, por ejemplo, el clientId neodoo, esto generaría una queue multicast con el nombre neodoo.amq.test

Si ahora queremos conectar otro consumidor a la misma queue, ¡No podríamos!
Por un lado, si especificamos un mismo clientId para que «acertásemos» el nombre de la queue, cancelaríamos la subscripción del otro cliente (estaríamos conectando el mismo de nuevo), y por otro, si especificamos otro clientId contra el mismo address, eso crearía otra queue y ambos clientes recibirían todos los mensajes que llegasen al address.

La solución se encuentra en una nueva funcionalidad incluida en MQTT 5, que llaman «Shared subscriptions» (https://www.hivemq.com/blog/mqtt5-essentials-part7-shared-subscriptions/)


Supongamos que tenemos creado el address amq.test y esta vez creamos una queue multicast llamada queue1, utilizando este nuevo concepto podríamos conectar un consumidor o N a esa misma queue tan solo especificando el topic de la siguiente manera:

$share/{amq_queue}/{amq_address}

En nuestro ejemplo sería:

$share/queue1/amq/test

De esta manera al subscribir varios clientes MQTT a ese topic, los mensajes les llegarían repartidos a partes iguales a cada cliente.

Esta forma de subscribirse también sirve para conectar un único cliente a una queue previamente creada, sea cual sea el nombre de la queue, es decir, saltándonos el mapeo que Artemis hace por defecto, mencionado en el ejemplo inicial.

Pin It on Pinterest