Delphi MQTT İstemcisi — Herhangi Bir MQTT 3.1 / 5.0 Aracısına Bağlanın

Delphi ve C++Builder için yerel bir MQTT 3.1.1 ve MQTT 5.0 istemci bileşeni. Publish, subscribe, retained mesajlar, last will, QoS 0/1/2, TLS, paylaşılan abonelikler ve tam MQTT 5 özellik yüzeyi. HiveMQ, Mosquitto, EMQX, AWS IoT Core ve Azure IoT Hub'a karşı doğrulanmıştır.

Pascal için birinci sınıf bir MQTT istemcisi

MQTT; IoT, telemetri, mobil push ve bağlı araçlar için fiilî mesajlaşma protokolüdür. Tek bir bayt çerçeveleme yazmadan onu Delphi kod tabanınıza taşıyın.

Bir Delphi MQTT istemcisi, VCL veya FMX uygulamanızın OASIS MQTT protokolünü konuşmasını sağlar. Bu, kısıtlı cihazlar ve düşük bant genişlikli, yüksek gecikmeli ağlar için tasarlanmış hafif yayınla/abone ol protokolüdür. sgcWebSockets ile tüm istemci yüzeyini, Delphi 7'den Delphi 13'e ve her Embarcadero hedef platformunda (Win32, Win64, Linux64, macOS, iOS, Android) çalışan tek bir görsel olmayan bileşen, TsgcWSPClient_MQTT olarak elde edersiniz.

Bileşen, her iki ana MQTT sürümünü de aynı kod yolunda uygular: uzun süredir dağıtılan MQTT 3.1.1 (OASIS standardı, 2014'ten bu yana neredeyse her IoT aracısı tarafından kullanılır) ve modern MQTT 5.0 (konu takma adları, oturum sona erme, kullanıcı özellikleri, gelişmiş kimlik doğrulama, istek/yanıt ve paylaşılan aboneliklerle). Tek bir özellik, Version, aralarında geçiş yapar.

Bileşen sınıfı

TsgcWSPClient_MQTT

Taşımalar

Native TCP (1883 / 8883), WebSocket (80 / 443), TLS via OpenSSL or SChannel

Sürümler

MQTT 3.1.1 & MQTT 5.0

Platformlar

Windows, macOS, Linux, iOS, Android, .NET

Test ettiğimiz her MQTT aracısıyla çalışır

Spesifikasyona uygun bir istemci, prensipte aracıdan bağımsızdır, ancak gerçek dünyadaki aracıların kendine özgü davranışları vardır. Her sürümü, müşterilerimizin gerçekten dağıttığı aracılara karşı test ederiz.

HiveMQ ve HiveMQ Cloud

Tam MQTT 5 özellik yüzeyi, paylaşılan abonelikler, gelişmiş kimlik doğrulama ve HiveMQ Cluster. Ücretsiz Cloud katmanı, bileşeni uçtan uca denemenin en kolay yoludur.

Eclipse Mosquitto

Referans açık kaynaklı aracı. docker run -p 1883:1883 eclipse-mosquitto ile yerel olarak çalıştırın ve 30 saniye içinde bir geliştirme hedefiniz olsun.

EMQX

Kural motoru, Kafka köprüleri ve paylaşılan aboneliklere sahip, çok ölçeklenebilir Erlang aracısı. Milyonlarca bağlantıda üretime hazırdır.

AWS IoT Core

X.509 istemci sertifikaları, 443'te ALPN ile anlaşılan MQTT, SigV4 ile imzalanmış WebSocket ve AWS IoT aracı kotaları. Özel AWS IoT Core sayfasına bakın.

Azure IoT Hub

Cihaz SAS belirteçleri, twin / direct-method konuları, DPS sağlama. Özel Azure IoT Hub sayfasına bakın.

Google Cloud IoT

8883 bağlantı noktasında JWT tabanlı cihaz kimlik doğrulaması. Bileşen, JWT'yi otomatik olarak oluşturur ve döndürür.

RabbitMQ Web-MQTT

15675 bağlantı noktasındaki RabbitMQ Web-MQTT eklentisi. Tek bir TLS bağlantı noktası üzerinden tarayıcılar ve Delphi istemcileri için aynı aracı.

VerneMQ, ActiveMQ, Artemis

Hepsi entegrasyon test paketini geçer. AMQP / STOMP / JMS ile çok protokollü birlikte var olma ücretsizdir.

QoS, retained, will, TLS — tüm yüzey

Her hat düzeyindeki MQTT özelliği bir özellik, metot veya olay olarak sunulur. Hiçbir şey gizli değil.

Hizmet Kalitesi 0/1/2

Gönder-ve-unut (QoS 0), PUBACK ile en az bir kez (QoS 1) ve dört yönlü el sıkışma PUBREC → PUBREL → PUBCOMP ile tam olarak bir kez (QoS 2). Her Publish() çağrısı için seçin.

Retained mesajlar

Bir yayını retained olarak işaretleyin, böylece aracı son bilinen değeri gelecekteki herhangi bir aboneye iletir. “Mevcut durum” konuları için standart desen.

Last Will & Testament

LastWillTestament, istemci düzgün olmayan şekilde koparsa aracının yayınladığı bir konu + yük kaydeder. Standart cihaz-çevrimdışı sinyali.

Temiz / kalıcı oturumlar

CleanSession false olduğunda abonelikler ve teslim edilmemiş QoS 1/2 mesajları yeniden bağlanmalar arasında kalıcı olur. Veri kaybetmeden aralıklı bağlantıyı köprüleyin.

TLS ve mTLS

OpenSSL veya SChannel ile 8883'te MQTTS. Sertifikaları diskten, Windows sertifika deposundan, PKCS#12 paketlerinden veya donanım belirteçlerinden yükleyin.

WebSocket taşıması

MQTT'yi 443 bağlantı noktasında WSS üzerinden çalıştırmak için bileşeni bir TsgcWebSocketClient'a takın. HTTP farkındalıklı herhangi bir yük dengeleyiciden veya kurumsal proxy'den geçin.

MQTT 5 özellikleri

Oturum sona erme, alım maksimumu, maksimum paket boyutu, konu takma adı maksimumu, kullanıcı özellikleri, yanıt bilgisi. Her CONNECT / PUBLISH / SUBSCRIBE / DISCONNECT'te.

Paylaşılan abonelikler

$share/<group>/<topic>, gelen mesajları bir çalışan havuzu arasında sırayla dağıtır. Yatay ölçeklendirme ücretsizdir.

WatchDog yeniden bağlanma

Üstel geri çekilme ile otomatik yeniden bağlanma; abonelikler ve sıraya alınmış QoS 1/2 yayınları devam ederken yeniden oynatılır.

Sıfırdan bir yayınla/abone ol döngüsüne

Bileşeni bırakın, iki olayı bağlayın, Active ayarlayın.

uses
  sgcWebSocket, sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

var
  WSClient: TsgcWebSocketClient;
  MQTT: TsgcWSPClient_MQTT;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'broker.hivemq.com';
  WSClient.Port := 1883;
  WSClient.WatchDog.Enabled := True;

  MQTT := TsgcWSPClient_MQTT.Create(nil);
  MQTT.Client  := WSClient;
  MQTT.Version := mqtt50;
  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;

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

  // Retained “online” message
  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;

Kimlik doğrulama ve taşıma güvenliği

Dört aracı kimlik doğrulama deseninin tümü kutudan çıkar çıkmaz desteklenir: basit kullanıcı adı/parola (CONNECT paketinin içinde gönderilir), X.509 istemci sertifikaları (mTLS), JWT (Google Cloud IoT, özel aracılar) ve SAS belirteçleri (Azure IoT Hub). MQTT 5 gelişmiş kimlik doğrulama, SCRAM tarzı meydan okuma/yanıt akışları için AUTH paketini OnMQTTAuth aracılığıyla sunar.

Taşıma için, yerel MQTT-over-TCP'yi standart 1883 (açık) veya 8883 (TLS) bağlantı noktalarında çalıştırabilir veya katı yalnızca HTTP güvenlik duvarlarını ve CDN uç noktalarını aşmak için MQTT'yi bir WebSocket üzerinden tünelleyebilirsiniz (Client özelliği herhangi bir TsgcWebSocketClient kabul eder). Her iki seçenek de aynı bileşeni ve aynı olayları kullanır.

sgcWebSockets'te MQTT hakkında daha fazlası

MQTT protokol sayfası

TsgcWSPClient_MQTT için tam referans: özellikler, metotlar, olaylar, tüm alt protokol özellikleri.

Cloud IoT aracıları

AWS IoT Core, Azure IoT Hub, Google Cloud IoT için özel sayfalar.

Gerçek zamanlı seçici

WebSocket, SSE, AMQP veya HTTP/2 push yerine MQTT'yi ne zaman seçmeli.

Blog: MQTT üzerinden istek/yanıt

Asenkron RPC için MQTT 5 ResponseTopic + CorrelationData kullanımı.

Blog: SigV4 ile AWS IoT

AWS IoT Core'a karşı imzalı WebSocket kimlik doğrulaması.

Blog: AWS IoT özel kimlik doğrulama

AWS IoT özel yetkilendirici aracılığıyla belirteç tabanlı kimlik doğrulama.

5 dakikada yayınlamaya başlayın

Denemeyi alın, broker.hivemq.com:1883 adresine yönlendirin ve dahil edilen demo projesini çalıştırın.