Exemplos de código

Exemplo MQTT em Go

Conecte Go a um broker MQTT com o cliente Eclipse Paho para Go. Comece no broker público gratuito e depois aponte o mesmo código para um broker privado e seguro no ConnectMQ.

Biblioteca
Eclipse Paho Go
Instalação
go get github.com/eclipse/paho.mqtt.golang
Código-fonte no GitHubmqtt-code-samples/goClone os exemplos completos e prontos para rodar. Estrelas e pull requests são bem-vindos. Ver no GitHub

1. Teste no broker público gratuito

Sem precisar de conta: conecte-se a broker.connectmq.com na porta 1883 e comece a publicar em segundos.

main.go
package main

import (
	"fmt"
	"time"

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

func main() {
	topic := "your-project/sensors/temperature" // Use um prefixo de tópico exclusivo: qualquer pessoa pode ler o broker público

	// Conecta ao broker público gratuito (sem conta)
	opts := mqtt.NewClientOptions().AddBroker("tcp://broker.connectmq.com:1883")
	// Cada cliente precisa de um client ID único
	opts.SetClientID(fmt.Sprintf("go-%d", time.Now().UnixNano()))
	// Reconecta automaticamente se a conexão cair
	opts.SetAutoReconnect(true)
	// Executado quando a conexão é estabelecida
	opts.SetOnConnectHandler(func(c mqtt.Client) {
		// Assina o tópico 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())
	}
	// Publica uma leitura em JSON
	client.Publish(topic, 1, false, `{"temperature":21.5}`).Wait()
	// Mantém o cliente em execução
	select {}
}

Broker MQTT público gratuito

O broker público é compartilhado: qualquer pessoa pode assinar seus tópicos. Nunca envie senhas, dados pessoais ou qualquer informação confidencial por ele.

Sobre o broker MQTT público gratuito

2. Vá para produção com o ConnectMQ

Para dispositivos reais, use um broker MQTT serverless privado no ConnectMQ em vez do público: criptografia TLS, usuário e senha para cada dispositivo e controle de acesso por tópico, totalmente gerenciado. Comece no plano Free — sem cartão de crédito.

Substitua YOUR_BROKER_HOST, YOUR_USERNAME e YOUR_PASSWORD pelos valores do seu painel do ConnectMQ.

main.go
package main

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

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

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

	// Conecta ao seu broker privado do ConnectMQ na porta 8883
	opts := mqtt.NewClientOptions().AddBroker("ssl://YOUR_BROKER_HOST:8883")
	// Usuário e senha do seu painel do ConnectMQ
	opts.SetUsername("YOUR_USERNAME")
	opts.SetPassword("YOUR_PASSWORD")
	// TLS: o repositório de CAs do sistema verifica o certificado do broker
	opts.SetTLSConfig(&tls.Config{MinVersion: tls.VersionTLS12})
	// Cada cliente precisa de um client ID único
	opts.SetClientID(fmt.Sprintf("go-%d", time.Now().UnixNano()))
	// Reconecta automaticamente se a conexão cair
	opts.SetAutoReconnect(true)
	// Executado quando a conexão é estabelecida
	opts.SetOnConnectHandler(func(c mqtt.Client) {
		// Assina o tópico 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())
	}
	// Publica uma leitura em JSON
	client.Publish(topic, 1, false, `{"temperature":21.5}`).Wait()
	// Mantém o cliente em execução
	select {}
}

Perguntas frequentes sobre MQTT com Go

Como conectar Go a um broker MQTT?

Instale Eclipse Paho Go, conecte-se ao host do broker na porta 1883 (ou 8883 com TLS) e depois assine um tópico e publique mensagens nele. Os exemplos desta página se conectam ao broker público gratuito broker.connectmq.com e a um broker privado do ConnectMQ.

Existe um broker MQTT gratuito para testar Go?

Sim. broker.connectmq.com é um broker MQTT público e gratuito que não exige conta. Qualquer pessoa pode ler seus tópicos, então use-o apenas para testes e com um prefixo de tópico exclusivo.

Como proteger uma conexão MQTT com Go?

Conecte-se via TLS na porta 8883 com um usuário e senha do seu painel do ConnectMQ e, em vez de usar o broker público, dê a cada dispositivo suas próprias credenciais e permissões de tópico.

Broker MQTT público gratuito

Teste qualquer exemplo em broker.connectmq.com — sem cadastro, com MQTT 3.1.1 e 5, TCP, TLS e WebSocket.

Sobre o broker MQTT público gratuito

MQTT serverless seguro para produção

Quando chegar a hora dos dispositivos reais, rode o mesmo código em um broker ConnectMQ privado e totalmente gerenciado, com TLS e credenciais por dispositivo.

Comece grátis

Seu broker MQTT privado está a poucos cliques de distância

Crie uma conta, receba as credenciais do seu broker e conecte seu primeiro dispositivo — sem servidores para instalar, atualizar ou escalar.

MQTT sobre WebSocket: Conecte um Navegador a um Broker MQTT com MQTT.js

Navegadores não conseguem abrir sockets TCP puros, então aplicações web falam MQTT sobre WebSocket. Construa um cliente funcional no navegador e outro em Node.js usando o servidor MQTT público broker.connectmq.com e aprenda a resolver os erros de conexão mais comuns.

9 min de leitura