MQTT Client 컴포넌트: sgcMQ | eSeGeCe

MQTT Client

TsgcWSPClient_MQTT는 네이티브 MQTT 3.1.1 및 MQTT 5.0 클라이언트입니다. QoS 0, 1, 2, 보존 메시지, Last Will and Testament, 지속 세션으로 발행하고 구독하며, 이유 코드, 사용자 속성, 토픽 별칭, 공유 구독, 확장 인증 같은 MQTT 5의 추가 기능도 사용할 수 있습니다. Delphi와 C++ Builder에서 같은 컴포넌트, 같은 API를 사용합니다.

TsgcWSPClient_MQTT

ClientTsgcTCPClient를 할당하고, MQTTVersion으로 프로토콜 버전을 고르고, OnMQTTConnectOnMQTTPublish를 연결한 다음 SubscribePublish를 호출하세요.

컴포넌트 클래스

TsgcWSPClient_MQTT

사양

OASIS MQTT 3.1.1 및 MQTT 5.0

전송

TCP (1883) 또는 TLS (8883)

언어

Delphi, C++ Builder

전송: 일반 TCP와 TLS. sgcMQ는 일반 TCP와 TLS로 연결합니다. MQTT over WebSocket이 필요하다면 WebSocket 클라이언트를 제공하는 sgcWebSockets 패키지가 필요합니다.

연결하고, 구독하고, 발행하기

Client 속성에 지정한 TsgcTCPClient가 MQTT를 TCP 소켓 위에 바로 올립니다. 암호화된 브로커에는 TLS를 켜고 포트를 8883으로 지정하세요.

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);

주요 속성 & 메서드

가장 자주 사용하게 되는 멤버들입니다.

캐리어

Client는 소켓을 소유한 TsgcTCPClient를 받습니다. 이 컴포넌트의 Host, Port, TLS, TLSOptions, WatchDog이 바이트가 오가는 방식을 결정합니다.

프로토콜 버전

MQTTVersion으로 mqtt311 또는 mqtt5를 선택합니다. MQTT 5의 속성과 이유 코드는 버전 5를 선택했을 때만 와이어에 나타납니다.

인증

Authentication.Enabled, UserName, Password가 CONNECT 패킷을 채웁니다. MQTT 5의 챌린지/응답 방식에는 AuthOnMQTTAuth와 함께 사용하세요.

발행

Publish(topic, text, qos, retain)가 메시지를 보내며, 바이너리 페이로드용 TStream 오버로드도 있습니다. PublishAndWait는 브로커가 패킷을 확인할 때까지 블로킹합니다.

구독

Subscribe(topic, qos)는 필터 하나 또는 TsgcWSTopics 목록을 받고, UnSubscribe가 이에 대응합니다. 와일드카드는 한 단계에 +, 그 아래 전체에 #입니다.

전달 이벤트

OnMQTTPublish가 수신 메시지를 전달합니다. QoS 2 핸드셰이크는 OnMQTTPubRec, OnMQTTPubRel, OnMQTTPubComp로 드러나고, QoS 1에는 OnMQTTPubAck가 있습니다.

Last Will

LastWillTestament는 정상적인 DISCONNECT 없이 연결이 끊겼을 때 브로커가 대신 발행할 토픽, 메시지, QoS, retain 플래그를 담습니다.

세션과 연결 유지

ConnectProperties가 MQTT 5의 세션 만료와 제한값을 설정합니다. HeartBeat는 keep-alive PINGREQ를 보내고, 응답 시 OnMQTTPing이 발생합니다.

QoS 저장

QoS 속성은 확인 응답이 오기 전까지 송신 QoS 1과 2 메시지를 어떻게 저장하고 재전송할지 제어합니다.

계속 살펴보기

온라인 도움말전체 API 레퍼런스와 사용 안내서.
sgcMQ 전체 컴포넌트7개 컴포넌트의 전체 기능 매트릭스를 살펴보세요.
무료 체험판 다운로드Mosquitto, HiveMQ 또는 직접 운영하는 브로커에 클라이언트를 연결해 보세요.
가격Single, Team, Site 라이선스, 전체 소스 코드 포함.
최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

시작할 준비가 되셨나요?

무료 체험판을 다운로드하고 Delphi 또는 C++ Builder에서 첫 MQTT 메시지를 발행해 보세요.