Skip to content
mobius1qwe edited this page Oct 27, 2026 · 1 revision

Home > MQTT > Broker MQTT

Broker MQTT

Important

Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.

Nível: intermediário

Em uma frase: o TRALMQTTBroker é um broker MQTT 3.1.1 e 5.0 completo dentro do seu programa, e é também um servidor RAL: os plugins de segurança e as autenticações que você já usa no REST valem para quem conecta por MQTT.

Você vai precisar: o pacote RALModuleMQTTPackage; para TLS, a OpenSSL e um certificado.

Na IDE, sem código

  1. Coloque um TRALMQTTBroker (paleta RAL - Server).
  2. Port é a porta MQTT (1883). TLSPort (8883) só abre com SSL.Enabled, SSL.CertFile e SSL.KeyFile. WebSocketPort abre MQTT sobre WebSocket (WebSocketTLS para wss, caminho em WebSocketPath).
  3. Quem pode entrar: AllowAnonymous é False, como no Mosquitto 2. Ou liste Users (nome=senha, uma por linha), ou ligue um autenticador do RAL (autenticação) ao broker como a qualquer servidor, ou decida em OnConnect.
  4. Clique com o botão direito e escolha Testar portas: diz se as portas estão livres e se o certificado carrega, sem ligar o broker.
  5. Active := True.

O que ele faz

recurso onde
QoS 0, 1 e 2, mensagens retidas, will (com atraso no 5.0) sempre
sessão que sobrevive à desconexão e ao reinício do broker SessionStore (mskFile grava em DataFolder; mskMemory não guarda)
assinatura compartilhada ($share/grupo/filtro) sempre (5.0)
permissões por usuário, cliente e tópico Permissions
autenticação SCRAM (5.0) AuthMethods (SCRAM-SHA-256...), usuários de Users ou OnSCRAMCredential
senha que é um token (JWT) PasswordIsToken
estatísticas em $SYS/broker/... SysTopics, a cada SysInterval segundos
limites MaxConnections, MaxPacketSize, MaxQueuedMessages, MaxSessionExpiry, MaximumQoS
clientes MQTT-SN um TRALMQTTSNGateway ligado ao broker (MQTT-SN)
HTTP um TRALMQTTRestModule num servidor RAL (ponte REST)

Permissões

Cada item de Permissions tem User, ClientID, TopicFilter, Access (leitura, escrita ou as duas) e Allow. O primeiro item que casa decide. Sem nenhum item, tudo é permitido; com itens, o que nenhum casa é recusado. No filtro, %u é o usuário e %c o identificador do cliente: casa/%u/# dá a cada um a sua pasta.

Por código

RALMQTTBroker1.Publish('avisos/geral', 'manutencao as 22h', mqQoS1, True);
RALMQTTBroker1.Clients(ListBox1.Items);          // quem esta conectado
RALMQTTBroker1.DisconnectClient('sensor-12');

Eventos: OnConnect (aceitar ou recusar), OnDisconnect, OnPublish (recusar ou descartar uma publicação), OnSubscribe (baixar o QoS ou recusar), OnMessage (só olhar o que passa).

Erros comuns

sintoma causa o que fazer
todo cliente recebe "Not authorized" AllowAnonymous False e ninguém cadastrado Users, um autenticador ou AllowAnonymous := True (só em teste)
TLSPort não abre SSL.Enabled desligado ou certificado faltando Testar portas diz qual
a porta não abre outro programa (um Mosquitto?) já a usa Testar portas; troque Port
mensagens somem depois de reiniciar SessionStore = mskMemory mskFile
um cliente derruba o outro os dois usam o mesmo ClientID o MQTT só deixa um por identificador: dê um a cada um

Veja também

Clone this wiki locally