Komponent MQTT Client: sgcMQ | eSeGeCe

MQTT Client

TsgcWSPClient_MQTT to natywny klient MQTT 3.1.1 i MQTT 5.0. Publikuj i subskrybuj z QoS 0, 1 i 2, wiadomościami zachowanymi, mechanizmem Last Will and Testament, trwałymi sesjami oraz nowościami MQTT 5: kodami przyczyn, właściwościami użytkownika, aliasami tematów, subskrypcjami współdzielonymi i rozszerzonym uwierzytelnianiem. Ten sam komponent i to samo API w Delphi oraz C++ Builder.

TsgcWSPClient_MQTT

Przypisz TsgcTCPClient do Client, wybierz wersję protokołu przez MQTTVersion, podłącz OnMQTTConnect i OnMQTTPublish, a następnie wywołaj Subscribe oraz Publish.

Klasa komponentu

TsgcWSPClient_MQTT

Specyfikacja

OASIS MQTT 3.1.1 i MQTT 5.0

Transport

TCP (1883) lub TLS (8883)

Języki

Delphi, C++ Builder

Transport: zwykły TCP i TLS. sgcMQ łączy się przez zwykły TCP i TLS. Jeśli potrzebujesz MQTT przez WebSocket, wymaga to pakietu sgcWebSockets, który dostarcza klienta WebSocket.

Połącz się, subskrybuj, publikuj

TsgcTCPClient we właściwości Client umieszcza MQTT bezpośrednio na gnieździe TCP. Włącz TLS i ustaw port na 8883, aby połączyć się z brokerem szyfrowanym.

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Types,
  sgcWebSocket_Protocols, sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

var
  TCPClient: TsgcTCPClient;
  MQTT: TsgcWSPClient_MQTT;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'broker.example.com';
  TCPClient.Port := 1883;
  TCPClient.WatchDog.Enabled := True;

  MQTT := TsgcWSPClient_MQTT.Create(nil);
  MQTT.Client := TCPClient;
  MQTT.MQTTVersion := mqtt5;
  MQTT.Authentication.Enabled  := True;
  MQTT.Authentication.UserName := 'sgc';
  MQTT.Authentication.Password := 'sgc';

  MQTT.LastWillTestament.Enabled := True;
  MQTT.LastWillTestament.Topic   := 'devices/sensor-01/status';
  MQTT.LastWillTestament.Message := 'offline';
  MQTT.LastWillTestament.QoS     := mtqsAtLeastOnce;
  MQTT.LastWillTestament.Retain  := True;

  MQTT.OnMQTTConnect := MQTTConnect;
  MQTT.OnMQTTPublish := MQTTPublish;

  TCPClient.Active := True;
end;

procedure TForm1.MQTTConnect(Connection: TsgcWSConnection;
  const Session: Boolean; const ReasonCode: Integer;
  const ReasonName: string;
  const ConnectProperties: TsgcWSMQTTCONNACKProperties);
begin
  MQTT.Subscribe('sensors/+/temperature', mtqsAtLeastOnce);
  MQTT.Publish('devices/sensor-01/status',
    'online', mtqsAtLeastOnce, True);
end;

procedure TForm1.MQTTPublish(Connection: TsgcWSConnection;
  aTopic, aText: string;
  PublishProperties: TsgcWSMQTTPublishProperties);
begin
  Memo1.Lines.Add(aTopic + ' = ' + aText);
end;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_MQTT_Client.hpp

TsgcTCPClient *TCPClient = new TsgcTCPClient(this);
TCPClient->Host = "broker.example.com";
TCPClient->Port = 1883;
TCPClient->WatchDog->Enabled = true;

TsgcWSPClient_MQTT *MQTT = new TsgcWSPClient_MQTT(this);
MQTT->Client = TCPClient;
MQTT->MQTTVersion = mqtt5;
MQTT->Authentication->Enabled  = true;
MQTT->Authentication->UserName = "sgc";
MQTT->Authentication->Password = "sgc";

MQTT->OnMQTTConnect = MQTTConnect;
MQTT->OnMQTTPublish = MQTTPublish;

TCPClient->Active = true;

void __fastcall TForm1::MQTTPublish(TsgcWSConnection *Connection,
    UnicodeString aTopic, UnicodeString aText,
    TsgcWSMQTTPublishProperties PublishProperties)
{
  Memo1->Lines->Add(aTopic + " = " + aText);
}

// In the OnMQTTConnect handler:
MQTT->Subscribe("sensors/+/temperature", mtqsAtLeastOnce);
MQTT->Publish("devices/sensor-01/status",
  "online", mtqsAtLeastOnce, true);

Kluczowe właściwości i metody

Składowe, po które sięgasz najczęściej.

Nośnik

Client przyjmuje TsgcTCPClient, który jest właścicielem gniazda. Jego Host, Port, TLS, TLSOptions i WatchDog decydują o tym, jak podróżują bajty.

Wersja protokołu

MQTTVersion wybiera mqtt311 lub mqtt5. Właściwości i kody przyczyn MQTT 5 pojawiają się w transmisji tylko wtedy, gdy wybrana jest wersja 5.

Uwierzytelnianie

Authentication.Enabled, UserName i Password wypełniają pakiet CONNECT. Dla schematów wyzwanie/odpowiedź w MQTT 5 użyj Auth razem z OnMQTTAuth.

Publikowanie

Publish(topic, text, qos, retain) wysyła wiadomość, a przeciążenie TStream obsługuje ładunki binarne. PublishAndWait blokuje do czasu potwierdzenia pakietu przez brokera.

Subskrybowanie

Subscribe(topic, qos) przyjmuje pojedynczy filtr albo listę TsgcWSTopics, a UnSubscribe działa odwrotnie. Symbole wieloznaczne to + dla jednego poziomu i # dla reszty.

Zdarzenia dostarczania

OnMQTTPublish dostarcza wiadomość przychodzącą. Handshake QoS 2 jest wystawiony jako OnMQTTPubRec, OnMQTTPubRel i OnMQTTPubComp, a OnMQTTPubAck obsługuje QoS 1.

Last Will

LastWillTestament niesie temat, wiadomość, QoS i flagę retain, które broker opublikuje w twoim imieniu, jeśli połączenie zerwie się bez czystego DISCONNECT.

Sesje i utrzymanie połączenia

ConnectProperties ustawia wygasanie sesji i limity MQTT 5. HeartBeat steruje pakietem keep-alive PINGREQ, a OnMQTTPing reaguje na odpowiedź.

Przechowywanie QoS

Właściwość QoS kontroluje sposób przechowywania i ponawiania wychodzących wiadomości QoS 1 i 2, dopóki potwierdzenie nie zostanie odebrane.

Poznawaj dalej

Pomoc onlinePełna dokumentacja API i przewodnik użytkowania.
Wszystkie komponenty sgcMQPrzejrzyj pełną matrycę funkcji wszystkich siedmiu komponentów.
Pobierz bezpłatną wersję próbnąUruchom klienta wobec Mosquitto, HiveMQ lub własnego brokera.
CennikLicencje Single, Team i Site z pełnym kodem źródłowym.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Gotowy, aby zacząć?

Pobierz bezpłatną wersję próbną i opublikuj swoją pierwszą wiadomość MQTT z Delphi lub C++ Builder.