sgcMQ beş dakikada

Bu pakette yedi yerel mesajlaşma istemcisi gelir. Çalışan bir şeye giden en kısa yol MQTT'dir, bu nedenle bu sayfa şunu yapar: bir aracıya bağlanın, bir konuya abone olun, bir mesaj yayımlayın ve geri gelişini izleyin. AMQP, Kafka ve STOMP aynı iki bileşenli yapıyı izler.

MQTT 3.1.1 ve 5.0, AMQP 0.9.1 ve 1.0, Kafka, STOMP
Harici kitaplık ve DLL yok
Standard sürüm ve üzeri

Bir değil, iki bileşen

İnsanları takılan kısım burasıdır. Protokol bileşeni MQTT konuşur; ayrı bir istemci bileşeni soketin sahibidir. İkisini tek bir atamayla bağlarsınız.

Protokol bileşeni

SGC MQ palet sayfasındaki TsgcWSPClient_MQTT. Connect, Subscribe, Publish, UnSubscribe ve on üç MQTT olayını taşır.

Taşıma bileşeni

WebSocket üzerinden MQTT için TsgcWebSocketClient veya TCP üzerinden düz MQTT için TsgcTCPClient. Host ve Port değerlerini bunun üzerinde ayarlayın.

İkisini birleştiren tek satır

MQTT.Client := WSClient;. Bundan sonra bağlantıyı protokol üzerinde bir metot çağırarak değil, WSClient.Active := True ayarlayarak açarsınız.

Platformlar

sgcWebSocket_Protocol_MQTT_Client.pas dosyasında platform koruması yoktur, yalnızca koşullu bir Windows içe aktarması vardır ve bileşen ComponentPlatforms(0) ile kaydedilir. Her hedef derlenir.

Gereksinimler ve sürümler

Sürüm sütunu, her protokolü kısıtlayan tanımdır; yanında Source/sgcVer.inc içinde bulunduğu satır yer alır.

Konu Değer
IDE Delphi 7'den RAD Studio 13'e ve C++Builder 2007'den 13'e kadar.
Uses yan tümcesi TsgcWSPClient_MQTT için sgcWebSocket_Protocols, istemci için sgcWebSocket, TsgcWSConnection için sgcWebSocket_Classes ve TmqttQoS için sgcWebSocket_Types.
MQTT sürümü SGC_MQTT, 675. satırdan 724. satıra kadar uzanan {$IFDEF SGC_EDT_STD} bloğunun içinde, 717. satırda tanımlanır. Yani Standard ve üzeri. Bloklar birikimlidir; dolayısıyla Professional, Enterprise ve All-Access de bunu içerir.
Diğer protokoller Hepsi aynı Standard bloğunda: 716. satırda SGC_STOMP, 718'de SGC_AMQP, 719'da SGC_AMQP1, 720'de SGC_KAFKA ve 715'te SGC_WAMP. Hiçbiri Enterprise özelliği değildir.
Sürüm, bağımsız paket sgcMQ ürünü 855. satırda SGC_PACK_MQ tanımlar ve 959 ile 966. satırlardaki kendi bloğu aynı beş protokol tanımını açar.
Platformlar MQTT istemci unit'inde unit kapsamında bir platform koruması yoktur. Uses yan tümcesindeki tek koşul {$IFDEF MSWINDOWS}Windows, {$ENDIF} ifadesidir.

Kurmadan test edebileceğiniz bir aracı mı istiyorsunuz? Pakette gelen MQTT demosu, www.esegece.com üzerindeki genel bir test aracısına yöneliktir; WebSocket üzerinden MQTT için port 15675'tir.

Kurun ve palet sayfasını bulun

sgcMQ, sgcWebSockets yükleyicisinin içinde ve ayrıca kendi paketi olarak gelir. Kurulum her iki durumda da aynıdır.

1. Zip dosyasını açın

İndirdiğiniz dosyayı aşağıda {$DIR} olarak adlandırılan bir klasöre açın.

2. Kitaplık yolu

Tools, Options, Library. {$DIR}\source yolunu ve IDE'niz için lib klasörünü ekleyin; örneğin {$DIR}\libD13\$(Platform).

3. Paketleri derleyin

{$DIR}\Packages\ altında IDE sürümünüz için paket grubunu açın. Önce çalışma zamanı .dpk dosyasını derleyin, ardından tasarım zamanı dcl dosyasını kurun.

4. Paleti kontrol edin

Sürümünüzün etkinleştirdiği protokol istemcilerini içeren SGC MQ adlı bir sayfa görünür. Standard ve üzeri bir derlemede TsgcWSPClient_MQTT oradadır.

5. Demoyu açın

{$DIR}\Demos\02.WebSocket_Protocols\08.MQTT_Client klasörünü açın. Aşağıdaki kod oradan gelir ve zaten canlı bir test aracısına yöneltilmiştir.

Bağlanın, abone olun, yayımlayın

Protokolü bir istemciye bağlayın, bağlantıyı açın, bir konuya abone olun ve ona yayın yapın. Mesaj OnMQTTPublish üzerinde geri gelir.

uClientMQTT.pas
uses
  Classes, SysUtils,
  // sgc
  sgcWebSocket, sgcWebSocket_Classes, sgcWebSocket_Protocols,
  sgcWebSocket_Types, sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

procedure TfrmClientPROTOCOL.FormCreate(Sender: TObject);
begin
  WSClient := TsgcWebSocketClient.Create(Self);
  WSClient.Host := 'www.esegece.com';
  WSClient.Port := 15675;
  WSClient.TLS := False;

  // ... attach the client to the MQTT protocol
  MQTT.Client := WSClient;

  // ... and THIS is what opens the connection.
  // There is no Connect call on the protocol component.
  WSClient.Active := True;
end;

WebSocket yerine TCP üzerinden düz MQTT için bunun yerine sgcTCP_Client_WS içinden bir TsgcTCPClient oluşturun ve MQTT.Client özelliğini ona yöneltin. Başka hiçbir şey değişmez; iki bileşenin ayrı olmasının nedeni budur.

uClientMQTT.pas
procedure TfrmClientPROTOCOL.btnSubscribeClick(Sender: TObject);
begin
  MQTT.Subscribe('sgc/quickstart');
end;

procedure TfrmClientPROTOCOL.btnPublishClick(Sender: TObject);
begin
  // topic, payload, QoS, retain
  MQTT.Publish('sgc/quickstart', 'hello from Delphi',
    mtqsAtLeastOnce, False);
end;

procedure TfrmClientPROTOCOL.btnUnsubscribeClick(Sender: TObject);
begin
  MQTT.UnSubscribe('sgc/quickstart');
end;

Publish, paket tanımlayıcısı olan bir Word döndürür ve beklemez. PublishAndWait bir Boolean döndürür ve aracı onaylayana kadar bekler; zaman aşımı varsayılan olarak on saniyedir. TmqttQoS, sgcWebSocket_Types içinden gelir.

uClientMQTT.pas
procedure TfrmClientPROTOCOL.MQTTMQTTConnect(Connection: TsgcWSConnection;
  const Session: Boolean; const ReasonCode: Integer;
  const ReasonName: String;
  const ConnectProperties: TsgcWSMQTTCONNACKProperties);
begin
  memoLog.Lines.Add('#connected: ' + ReasonName);
end;

procedure TfrmClientPROTOCOL.MQTTMQTTSubscribe(Connection: TsgcWSConnection;
  aPacketIdentifier: Word; aCodes: TsgcWSSUBACKS;
  SubscribeProperties: TsgcWSMQTTSUBACKProperties);
begin
  memoLog.Lines.Add('#subscribed: ' + IntToStr(aPacketIdentifier));
end;

procedure TfrmClientPROTOCOL.MQTTMQTTPublish(Connection: TsgcWSConnection;
  aTopic, aText: string;
  PublishProperties: TsgcWSMQTTPUBLISHProperties);
begin
  memoLog.Lines.Add(aTopic + ': ' + aText);
end;

Bunlar ilk önce önemli olan üçüdür. Onay akışı, bağlantının kesilmesi ve MQTT 5.0 kimlik doğrulaması için dokuz tane daha vardır. İşleyicileri IDE'nin oluşturmasına izin verin, çünkü parametre listeleri uzundur ve özellik nesneleri olaya göre farklılık gösterir.

Üç sekmenin hepsi, form denetimleri sabit değerlerle değiştirilmiş olarak paketle gelen Demos\02.WebSocket_Protocols\08.MQTT_Client\uClientMQTT.pas demosundan alınmıştır. MQTT nesnesi o projede forma yerleştirilmiştir; onu kodla oluşturmak aynı şekilde çalışır.

Gidiş dönüşü kanıtlayın

İki olay size aracının sizi kabul ettiğini ve konunun canlı olduğunu söyler.

OnMQTTConnect

Aracı oturumu kabul etti. Kabul etmediğinde nedenini ReasonCode ve ReasonName söyler; bu, düşen bir sokete göre çok daha yararlıdır.

OnMQTTSubscribe

Abonelik onaylandı. Bir TsgcWSSUBACKS olan aCodes, aracının konu başına yanıtını taşır; böylece reddedilen bir abonelik sessiz değil, görünür olur.

OnMQTTPublish

Bir mesaj geldi. Az önce abone olduğunuz konuya yayın yaparsanız doğrudan geri gelir; bu, tüm yolu tek tıklamada kanıtlar.

Onay olayları

QoS 1 ve 2'de teslimat daha sonra OnMQTTPubAck, OnMQTTPubRec, OnMQTTPubRel ve OnMQTTPubComp üzerinde onaylanır. Bunun yerine engelleyen bir çağrıya ihtiyacınız varsa PublishAndWait kullanın.

İlk seferde genellikle ne ters gider

Başarısız olan ilk bağlantıların neredeyse tamamı altı sorundan kaynaklanır.

Subscribe çağırınca hiçbir şey olmuyor

Bağlantı henüz açık değil. Protokol bileşeni soketi açmaz; istemci açar. WSClient.Active := True ayarlayın ve abone olmadan önce OnMQTTConnect olayını bekleyin.

İlk çağrıda erişim ihlali

MQTT.Client hiç atanmadı. Protokolü bir taşımaya bağlayan o tek satırdır ve onsuz protokolün yazacağı bir yer yoktur.

Yanlış taşıma için yanlış port

WebSocket üzerinden MQTT ve düz TCP üzerinden MQTT, çoğu aracıda farklı portlardır. 1883 ve 8883 olağan TCP portlarıdır; WebSocket uç noktası ise tamamen başka bir yerdedir. Pakette gelen demo WebSocket için 15675 kullanır.

OnMQTTMessage arıyorsunuz

Böyle bir olay yoktur. Aracıdan gelen mesajlar metin için OnMQTTPublish üzerinde, ham yükü ve tam mesaj nesnesini istediğinizde ise OnMQTTPublishEx üzerinde gelir.

QoS 1 ve 2 hiçbir şey yapmamış gibi görünüyor

Eşzamansız olarak onaylanırlar. Publish paket tanımlayıcısını hemen döndürür; onay daha sonra OnMQTTPubAck, OnMQTTPubRec, OnMQTTPubRel veya OnMQTTPubComp üzerinde gelir. Engelleyen bir çağrı istediğinizde PublishAndWait kullanın.

Aracı bağlantıyı reddediyor

Çoğu aracı bir istemci tanımlayıcısı ve kimlik bilgileri ister. Bunları Authentication üzerinde ayarlayın ve istemci tanımlayıcısını bağlanma anında hesaplamanız gerektiğinde OnMQTTBeforeConnect kullanın.

İlk konunun ötesinde

Aynı iki bileşenli yapı, paketteki diğer her protokolü taşır.

MQTT 5.0 özellikleri

MQTTVersion değerini ayarlayın; istek ve yanıt özellik nesneleri kullanılabilir hâle gelir. Kullanıcı özellikleri, abonelik tanımlayıcıları, konu takma adları ve neden kodlarının hepsi sunulur.

MQTT başvurusu

AMQP, her iki sürüm

İki ayrı istemci: RabbitMQ tarzı değişimler ve kuyruklar için 0.9.1 ve daha yeni tel protokolü için 1.0. İkisi de bir istemciye MQTT ile aynı şekilde bağlanır.

AMQP 0.9.1 başvurusu ve AMQP 1.0 başvurusu

Kafka ve STOMP

Yerel bir Kafka tel protokolü istemcisi ve RabbitMQ ile ActiveMQ için aracıya özgü varyantlarla STOMP 1.0'dan 1.2'ye.

RabbitMQ için STOMP ve ActiveMQ için STOMP

Bir bulut aracısıyla konuşun

AWS IoT ve Azure IoT ikisi de MQTT konuşur ve kitaplık, imzalama ile kimlik doğrulamalarını sizin yerinize halleden özel bileşenler içerir.

AWS IoT başvurusu ve Azure IoT başvurusu

Başvuru, demolar ve belgeler

Başvuru sayfaları her özelliği ve olayı belgelendirir. Demo projeleri indirmenin içinde, Demos\02.WebSocket_Protocols altında gelir.

Başvuru, MQTT istemcisi TsgcWSPClient_MQTT üzerindeki her metot, özellik ve olay.
Başvuru, AMQP 0.9.1 Değişimler, kuyruklar, bağlamalar ve tüketiciler.
Başvuru, AMQP 1.0 Bağlantılar, oturumlar ve 1.0 mesaj modeli.
TsgcWSPClient_MQTT bileşen sayfası MQTT istemcisinin tamamı; diğer altı protokol istemcisi buradan bağlantılıdır.
Protokollere genel bakış Alt protokol bileşenlerinin bir istemciye veya sunucuya nasıl bağlandığı.
Çevrimiçi yardım Oluşturulan başvuru, her zaman güncel sürümle uyumludur.

İlgili okumalar: yayımlama ve onayı bekleme, AMQP değişimleri ve kuyrukları ve Kafka istemcisi. Her ürünün kendi hızlı başlangıcı vardır ve başlarken sayfasında listelenir.

sgcMQ hızlı başlangıç soruları

Çünkü protokol ve taşıma ayrı ilgi alanlarıdır ve aynı MQTT istemcisinin kodunuzu değiştirmeden düz TCP veya WebSocket üzerinden çalışmasını sağlayan budur. TsgcWSPClient_MQTT MQTT paketlerini kodlar ve çözer. TsgcWebSocketClient veya TsgcTCPClient soketin, ana makinenin, portun ve TLS ayarlarının sahibidir. Tek bir atama ikisini birleştirir: MQTT.Client := WSClient;.
Active := True değerini protokolde değil, istemci bileşeninde ayarlayın. Pakette gelen demo tam olarak bunu yapar. Protokolde bir Connect metodu da vardır, ancak demo onu kullanmaz ve Active ayarlamak her örneğin izlediği yoldur.
SGC_MQTT, sgcVer.inc dosyasının 717. satırında, 675 ile 724. satırlar arasındaki SGC_EDT_STD bloğunun içinde tanımlanır. Bu, en düşük ücretli katman olan Standard sürümdür ve bloklar birikimli olduğundan daha yüksek her sürümde de bulunur. 716'daki STOMP, 718'deki AMQP, 719'daki AMQP 1.0 ve 720'deki Kafka aynı blokta yer alır. Mesajlaşma protokollerinin hiçbiri Enterprise özelliği değildir.
İmzası procedure(Connection: TsgcWSConnection; aTopic, aText: String; PublishProperties: TsgcWSMQTTPUBLISHProperties) olan OnMQTTPublish. OnMQTTMessage adında bir olay yoktur. Bir dize yerine ham baytlara ya da tüm mesaj nesnesine ihtiyaç duyduğunuzda bunun yerine OnMQTTPublishEx olayını işleyin.
Publish, paket tanımlayıcısı olan bir Word döndürür. Teslimat eşzamansız olarak onaylanır: QoS 1'de OnMQTTPubAck üzerinde, QoS 2'de OnMQTTPubRec, OnMQTTPubRel ve OnMQTTPubComp üzerinden. Aracı onaylayana kadar bekleyen bir çağrı istiyorsanız, bir Boolean döndüren ve varsayılan olarak on saniye olan bir zaman aşımı alan PublishAndWait kullanın.
Publish çağrısının üçüncü parametresi, sgcWebSocket_Types.pas içinde mtqsAtMostOnce, mtqsAtLeastOnce, mtqsExactlyOnce ve mtqsReserved üyeleriyle bildirilen bir TmqttQoS değeridir. Varsayılanı mtqsAtMostOnce değeridir. Subscribe aynı türü ikinci parametresi olarak alır.
Evet. sgcWebSocket_Protocol_MQTT_Client.pas unit kapsamında bir platform koruması taşımaz, uses yan tümcesindeki tek koşul Windows içe aktarmasıdır ve palet bileşeni ComponentPlatforms(0) ile kaydedilir; dolayısıyla IDE hedef platformlarını kısıtlamaz.
Evet. Protokol bileşeninde MQTTVersion değerini ayarlayın. Bunun ardından 5.0 özellik nesneleri devreye girer: giden yönde ConnectProperties ve dönüşte her olaydaki özellikler parametresi; örneğin OnMQTTConnect üzerinde TsgcWSMQTTCONNACKProperties ve OnMQTTPublish üzerinde TsgcWSMQTTPUBLISHProperties.
En avantajlı seçenek: All-AccessTüm eSeGeCe ürünleri, Premium Destek dahil, yılda €1,059'dan itibaren.
All-Access fiyatlarına bakın

Uygulamanızın arkasına bir aracı koymaya hazır mısınız?

Denemeyi indirin ve MQTT demosunu genel test aracısına karşı çalıştırın.