Repository navigation
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.
- Coloque um
TRALMQTTBroker(paleta RAL - Server). -
Porté a porta MQTT (1883).TLSPort(8883) só abre comSSL.Enabled,SSL.CertFileeSSL.KeyFile.WebSocketPortabre MQTT sobre WebSocket (WebSocketTLSpara wss, caminho emWebSocketPath). - Quem pode entrar:
AllowAnonymousé False, como no Mosquitto 2. Ou listeUsers(nome=senha, uma por linha), ou ligue um autenticador do RAL (autenticação) ao broker como a qualquer servidor, ou decida emOnConnect. - 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.
-
Active := True.
| 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) |
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.
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).
| 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 |
- MQTT 🚧
- Segurança no MQTT 🚧
- Ponte REST 🚧
- Plugins 🚧
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Resposta em fluxo 🚧
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- Servidor SOAP 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar