Ejemplos de código

Ejemplo MQTT con Go

Conecta Go a un broker MQTT con el cliente Eclipse Paho para Go. Empieza con el broker público gratuito y después apunta el mismo código a un broker privado y seguro en ConnectMQ.

Biblioteca
Eclipse Paho Go
Instalación
go get github.com/eclipse/paho.mqtt.golang
Código fuente en GitHubmqtt-code-samples/goClona los ejemplos completos y listos para ejecutar. Se agradecen estrellas y pull requests. Ver en GitHub

1. Pruébalo en el broker público gratuito

Sin necesidad de cuenta: conéctate a broker.connectmq.com en el puerto 1883 y empieza a publicar en segundos.

main.go
package main

import (
	"fmt"
	"time"

	mqtt "github.com/eclipse/paho.mqtt.golang"
)

func main() {
	topic := "your-project/sensors/temperature" // Usa un prefijo de topic único: cualquiera puede leer el broker público

	// Conectar al broker público gratuito (sin cuenta)
	opts := mqtt.NewClientOptions().AddBroker("tcp://broker.connectmq.com:1883")
	// Cada cliente necesita un client ID único
	opts.SetClientID(fmt.Sprintf("go-%d", time.Now().UnixNano()))
	// Reconectar automáticamente si se pierde la conexión
	opts.SetAutoReconnect(true)
	// Se ejecuta al establecer la conexión
	opts.SetOnConnectHandler(func(c mqtt.Client) {
		// Suscribirse al topic de temperatura
		c.Subscribe(topic, 1, func(_ mqtt.Client, m mqtt.Message) {
			fmt.Printf("%s: %s\n", m.Topic(), m.Payload())
		})
	})

	client := mqtt.NewClient(opts)
	if t := client.Connect(); t.Wait() && t.Error() != nil {
		panic(t.Error())
	}
	// Publicar una lectura en JSON
	client.Publish(topic, 1, false, `{"temperature":21.5}`).Wait()
	// Mantener el cliente en ejecución
	select {}
}

Broker MQTT público gratuito

El broker público es compartido: cualquiera puede suscribirse a tus topics. Nunca envíes por él contraseñas, datos personales ni información confidencial.

Acerca del broker MQTT público gratuito

2. Pasa a producción con ConnectMQ

Para dispositivos reales, usa un broker MQTT serverless privado en ConnectMQ en lugar del público: cifrado TLS, usuario y contraseña para cada dispositivo y control de acceso por topic, totalmente gestionado. Empieza con el plan Free, sin tarjeta.

Sustituye YOUR_BROKER_HOST, YOUR_USERNAME y YOUR_PASSWORD por los valores de tu panel de ConnectMQ.

main.go
package main

import (
	"crypto/tls"
	"fmt"
	"time"

	mqtt "github.com/eclipse/paho.mqtt.golang"
)

func main() {
	topic := "your-project/sensors/temperature"

	// Conectar a tu broker privado de ConnectMQ en el puerto 8883
	opts := mqtt.NewClientOptions().AddBroker("ssl://YOUR_BROKER_HOST:8883")
	// Usuario y contraseña de tu panel de ConnectMQ
	opts.SetUsername("YOUR_USERNAME")
	opts.SetPassword("YOUR_PASSWORD")
	// TLS: el almacén de CA del sistema verifica el certificado del broker
	opts.SetTLSConfig(&tls.Config{MinVersion: tls.VersionTLS12})
	// Cada cliente necesita un client ID único
	opts.SetClientID(fmt.Sprintf("go-%d", time.Now().UnixNano()))
	// Reconectar automáticamente si se pierde la conexión
	opts.SetAutoReconnect(true)
	// Se ejecuta al establecer la conexión
	opts.SetOnConnectHandler(func(c mqtt.Client) {
		// Suscribirse al topic de temperatura
		c.Subscribe(topic, 1, func(_ mqtt.Client, m mqtt.Message) {
			fmt.Printf("%s: %s\n", m.Topic(), m.Payload())
		})
	})

	client := mqtt.NewClient(opts)
	if t := client.Connect(); t.Wait() && t.Error() != nil {
		panic(t.Error())
	}
	// Publicar una lectura en JSON
	client.Publish(topic, 1, false, `{"temperature":21.5}`).Wait()
	// Mantener el cliente en ejecución
	select {}
}

Preguntas frecuentes sobre MQTT con Go

¿Cómo conecto Go a un broker MQTT?

Instala Eclipse Paho Go, conéctate al host del broker en el puerto 1883 (o 8883 con TLS), suscríbete a un topic y publica mensajes en él. Los ejemplos de esta página se conectan al broker público gratuito broker.connectmq.com y a un broker privado de ConnectMQ.

¿Hay un broker MQTT gratuito para probar Go?

Sí. broker.connectmq.com es un broker MQTT público y gratuito que no requiere cuenta. Cualquiera puede leer sus topics, así que úsalo solo para pruebas y con un prefijo de topic único.

¿Cómo protejo una conexión MQTT con Go?

Conéctate mediante TLS en el puerto 8883 con un usuario y una contraseña de tu panel de ConnectMQ, y asigna a cada dispositivo sus propias credenciales y permisos de topic en lugar de usar el broker público.

Broker MQTT público gratuito

Prueba cualquier ejemplo en broker.connectmq.com: sin registro, con MQTT 3.1.1 y 5, TCP, TLS y WebSocket.

Acerca del broker MQTT público gratuito

MQTT serverless seguro para producción

Cuando llegue el momento de usar dispositivos reales, ejecuta el mismo código en un broker de ConnectMQ privado y totalmente gestionado, con TLS y credenciales por dispositivo.

Empieza gratis

Tu broker MQTT privado, a unos pocos clics

Crea una cuenta, obtén las credenciales de tu broker y conecta tu primer dispositivo, sin servidores que instalar, parchear ni escalar.

MQTT sobre WebSocket: conecta un navegador a un broker MQTT con MQTT.js

Los navegadores no pueden abrir sockets TCP directos, así que las aplicaciones web hablan MQTT sobre WebSocket. Construye un cliente de navegador y un cliente Node.js funcionales contra broker.connectmq.com y aprende a resolver los errores de conexión más comunes.

9 min de lectura