sgcMQ Funktionsmatrix: MQTT, AMQP, Kafka, STOMP | eSeGeCe

sgcMQ Funktionsmatrix

Alles, was sgcMQ kann, aufgeschlüsselt nach den sieben Client-Komponenten und den Spezifikationen, die sie umsetzen. Jede Funktion arbeitet in Delphi und C++ Builder identisch, und jede Lizenz enthält den vollständigen Quellcode. Klicke auf eine Komponente, um ihre eigene Seite mit Nutzung und Beispielen zu öffnen.

MQTT

3.1.1 und 5.0

AMQP

0.9.1 und 1.0

Kafka

Natives Wire-Protokoll

STOMP

1.0 / 1.1 / 1.2

Transport & TLS

Reines TCP und TLS

Standards & Plattformen

Delphi 7 bis 13, C++ Builder

sgcMQ ist eigenständig. Die sgcWebSockets Core Runtime ist bereits mitgeliefert, es ist also kein Add-on und du musst keine Basislizenz kaufen.

Transport: reines TCP und TLS. sgcMQ verbindet sich über reines TCP und TLS. Wenn du das Protokoll über WebSocket betreiben musst, zum Beispiel MQTT über WebSocket oder AMQP über WebSocket, benötigst du dafür ein sgcWebSockets Paket, das den WebSocket-Client bereitstellt.

Jede Funktion in den Tabellen unten wird über den reinen TCP-Träger TsgcTCPClient erreicht, den sgcMQ von Haus aus mitbringt.

Sieben Paletten-Komponenten

Vier Protokollfamilien, registriert auf der Palettenseite SGC MQ.

KomponenteKlasseFamilieBeschreibung
MQTT-ClientTsgcWSPClient_MQTTMQTTPublish/Subscribe mit MQTT 3.1.1 und 5.0: QoS 0/1/2, Retained Messages, Last Will and Testament, Sessions und MQTT-5-Eigenschaften.
AMQP 0.9.1 ClientTsgcWSPClient_AMQPAMQPChannels, Exchanges, Queues und Bindings, Consumer, Bestätigungen, Prefetch-QoS und Transaktionen.
AMQP 1.0 ClientTsgcWSPClient_AMQP1AMQPSessions, Sender- und Receiver-Links, kreditbasierte Flusskontrolle, SASL-Authentifizierung und Helfer für Azure-CBS-Token.
Kafka-ClientTsgcWSPClient_KafkaKafkaProducer mit Acks und gzip, Consumer Groups mit Rebalance und Offset-Commits, Topic-Verwaltung.
STOMP-ClientTsgcWSPClient_STOMPSTOMPFrames für STOMP 1.0/1.1/1.2: SEND, SUBSCRIBE, ACK, NACK, Receipts, Heart-Beating und Transaktionen.
STOMP-RabbitMQ-ClientTsgcWSPClient_STOMP_RabbitMQSTOMPSTOMP, abgestimmt auf RabbitMQ: Helfer für Queue, Topic, Exchange, externe Queues und temporäre Queues, über TCP oder TLS.
STOMP-ActiveMQ-ClientTsgcWSPClient_STOMP_ActiveMQSTOMPSTOMP, abgestimmt auf Apache ActiveMQ, mit Helfern für Queue und Topic sowie einer Eigenschaft ActiveMQ_Options.

MQTT 3.1.1 und MQTT 5.0

Das Publish/Subscribe-Protokoll des IoT, mit der kompletten Quality-of-Service-Maschinerie offengelegt statt versteckt.

Funktion3.1.15.0Hinweise
Protokollversion wählenMQTTVersion nimmt mqtt311 oder mqtt5 entgegen.
QoS 0, 1 und 2Der QoS-2-Austausch wird als OnMQTTPubRec, OnMQTTPubRel und OnMQTTPubComp sichtbar gemacht, nicht verschluckt.
Retained MessagesDas Retain-Flag ist das vierte Argument von Publish.
Last Will and TestamentLastWillTestament transportiert Topic, Nachricht, QoS und Retain.
Wildcard-Subscriptions+ für eine Ebene, # für den Rest des Baums.
SessionsDas Argument Session von OnMQTTConnect meldet, ob der Broker eine fortgesetzt hat.
Publizieren und wartenPublishAndWait blockiert, bis der Broker das Paket bestätigt.
Einen Stream publizierenPublish hat eine TStream-Überladung für binäre Payloads.
Reason Codes und NamenMQTT 5 liefert bei CONNACK und DISCONNECT einen numerischen Reason Code samt Namen zurück.
CONNECT-EigenschaftenConnectProperties setzt Session Expiry, Receive Maximum, maximale Paketgröße und Topic Alias Maximum.
Topic-AliaseEine kurze Ganzzahl ersetzt auf der Leitung einen langen Topic-Namen und wird bei eingehenden Paketen automatisch aufgelöst.
User PropertiesBeliebige Schlüssel/Wert-Paare reisen mit CONNECT, PUBLISH, SUBSCRIBE und DISCONNECT mit.
Shared SubscriptionsAbonniere $share/<group>/<topic>, um Zustellungen auf eine Gruppe von Clients zu verteilen.
Erweiterte AuthentifizierungDer Roundtrip des AUTH-Pakets über Auth und OnMQTTAuth, für Challenge/Response-Verfahren.
Keep-AliveHeartBeat treibt PINGREQ an, bei der Antwort wird OnMQTTPing ausgelöst.

AMQP 0.9.1 und AMQP 1.0

Zwei Protokolle, die sich einen Namen teilen und sonst nichts. Deshalb liefert sgcMQ für jedes eine eigene Komponente, statt so zu tun, als passe eine API auf beide.

FunktionAMQP 0.9.1AMQP 1.0Hinweise
KomponenteTsgcWSPClient_AMQPTsgcWSPClient_AMQP1Anderes Wire-Format, anderes Objektmodell, andere Komponente.
Multiplexing-EinheitChannelSessionOpenChannel gegenüber CreateSession.
Topologie-DeklarationDeclareExchange, DeclareQueue, BindQueueAMQP 1.0 adressiert Knoten auf dem Broker, statt sie zu deklarieren.
SendenPublishMessage(channel, exchange, routingKey, body)SendMessage(session, link, text)Routing Key bei 0.9.1, Zieladresse bei 1.0.
EmpfangenConsume, dann OnAMQPBasicDeliverCreateReceiverLink, dann OnAMQPMessageBeide arbeiten Push-basiert, sobald sie einmal stehen.
BestätigungAckMessage / RejectMessageOnAMQPMessageSentAck0.9.1 bestätigt ein Delivery Tag, 1.0 schließt eine Zustellung ab.
FlusskontrolleSetQoS-Prefetch, EnableChannel / DisableChannelKreditbasiert (CreditSize, WindowSize)Beide verhindern, dass ein schneller Producer einen langsamen Consumer überrollt.
TransaktionenSelectTransaction, CommitTransaction, RollbackTransactionDie tx-Klasse von 0.9.1, pro Channel verfügbar.
Queue-PflegePurgeQueue, DeleteQueue, DeleteExchange, UnBindQueueCloseLink, CloseSessionJeweils mit einer blockierenden ...Ex-Variante, die auf die Antwort des Brokers wartet.
Erneute ZustellungRecover / RecoverAsyncBitte den Broker, unbestätigte Nachrichten erneut zuzustellen.
AuthentifizierungOnAMQPAuthentication, OnAMQPChallengeAuthentication.AuthType, OnAMQPSASLAuthentication1.0 bietet SASL ANONYMOUS, PLAIN und EXTERNAL.
Cloud-HelferCreateCBSLink, PutCBSToken, CreateAzureCbsSasToken, CreateAzureCbsJWTClaims-Based Security für Azure Service Bus und Event Hubs.
VerbindungsprüfungHeartBeatPing, AMQPOptions.IdleTimeoutWird beim Verbinden mit dem Broker ausgehandelt.
Verbindungs-TuningAMQPOptions.VirtualHost, MaxChannels, MaxFrameSize, LocaleAMQPOptions.ContainerId, ChannelMax, MaxFrameSize, MaxLinksPerSessionWird im Eröffnungs-Handshake gesendet und mit dem Broker ausgehandelt.
PrefetchSetQoS(channel, prefetchSize, prefetchCount, global)AMQPOptions.CreditSizeWie viele unbestätigte Nachrichten der Broker gleichzeitig unterwegs haben darf.
Frame-InspektionOnAMQPBeforeReadFrame, OnAMQPBeforeWriteFrameRohe Frames ansehen oder umschreiben, bevor sie verarbeitet oder gesendet werden.

Apache Kafka, direkt gesprochen

Das binäre Kafka-Protokoll in Object Pascal implementiert, ohne REST-Proxy davor und ohne librdkafka darunter.

FunktionAPIHinweise
Einen Record produzierenProduce(topic, value, key, partition)Key und Partition sind optional. ProduceBytes nimmt für beides TBytes.
Einen Batch produzierenProduceMessages(topic, partition, messages)Liefert die Produce-Antwort des Brokers für den gesamten Batch.
ZustellgarantieKafkaOptions.Producer.AckskafkaAcksNone, kafkaAcksLeader oder kafkaAcksAll.
KomprimierungKafkaOptions.Producer.CompressionkafkaCompressionNone oder kafkaCompressionGzip.
KonsumierenSubscribe([topics]), dann Poll(timeoutMs)Poll liefert eine TsgcKafkaMessages-Liste und löst zusätzlich OnKafkaMessage pro Record aus.
Consumer GroupsKafkaOptions.Consumer.GroupIdCoordinator-Discovery, Join, Sync und Heartbeat werden für dich erledigt. OnKafkaRebalance meldet Änderungen der Zuordnung.
Offset-StrategieKafkaOptions.Consumer.OffsetResetkafkaOffsetEarliest oder kafkaOffsetLatest, wenn kein committeter Offset vorliegt.
Offsets committenCommitSync, CommitOffset(topic, partition, offset)Oder setze Consumer.AutoCommit zusammen mit AutoCommitIntervalMs.
Eine Partition direkt lesenFetchMessages(topic, partition, offset, maxBytes)Umgeht die Consumer Group vollständig.
Offsets abfragenGetEarliestOffset, GetLatestOffset, GetCommittedOffsetPro Topic und Partition.
Fetch-TuningConsumer.MinBytes, MaxBytes, MaxPartitionBytes, MaxWaitMsWäge Latenz gegen Batch-Größe ab.
Topic-VerwaltungCreateTopic, DeleteTopic, GetMetadataPartitionsanzahl und Replikationsfaktor beim Anlegen.
GruppenverwaltungListGroups, DescribeGroupsUntersuche Consumer Groups aus deinem eigenen Werkzeug heraus.
Broker-Fähigkeiten abfragenGetApiVersionsFrage den Broker, welche Protokoll-API-Versionen er unterstützt.
SASLkafkaSaslNone, kafkaSaslPlainAuthentifizierung mit Benutzername und Passwort über SASL/PLAIN.

STOMP 1.0, 1.1 und 1.2

Ein generischer Client plus zwei broker-spezifische Nachfahren, die die Destination-Konventionen von RabbitMQ und ActiveMQ in benannte Methoden übersetzen.

FunktionSTOMPRabbitMQActiveMQHinweise
Einen Frame sendenSendPublishExPublishExDestination, Body, Content-Type und optionale Transaktion.
AbonnierenSubscribe(id, destination)SubscribeExSubscribeExDie Nachfahren ergänzen Argumente für Durable, Exclusive und Ack-Modus.
Queue-HelferSubscribeQueue, PublishQueue, UnSubscribeQueueSubscribeQueue, PublishQueue, UnSubscribeQueueDas Destination-Präfix /queue/, gekapselt.
Topic-HelferSubscribeTopic, PublishTopic, UnSubscribeTopicSubscribeTopic, PublishTopic, UnSubscribeTopicDas Destination-Präfix /topic/, gekapselt.
Exchange-HelferSubscribeExchange, PublishExchangeDie /exchange/-Destination von RabbitMQ mit einem Routing-Muster.
Externe QueuesSubscribeQueueOutside, PublishQueueOutsideDie /amq/queue/-Destination von RabbitMQ, für anderswo deklarierte Queues.
Temporäre Antwort-QueuesSubscribeTemporaryQueue, PublishTemporaryQueueDas Request/Reply-Muster /temp-queue/ von RabbitMQ.
BestätigenACK / NACKDer Ack-Modus wird pro Subscription gewählt (ackAuto und Verwandte).
TransaktionenBeginTransaction, CommitTransaction, AbortTransactionFasse mehrere SEND- und ACK-Frames zu einer atomaren Einheit zusammen.
ReceiptsOnSTOMPReceiptOnRabbitMQReceiptOnActiveMQReceiptDer Broker bestätigt einen Frame, den er verarbeitet hat.
Nachrichten-EreignisOnSTOMPMessageOnRabbitMQMessageOnActiveMQMessageLiefert Destination, Body und die Frame-Header.
Heart-BeatingHeartBeat, PingIm CONNECT-Frame ausgehandelt, in beide Richtungen.
VersionsaushandlungVersions.V1_0, V1_1, V1_2Gib die Versionen an, die du akzeptierst, der Broker wählt eine davon.
Virtueller HostOptions.VirtualHostWird bei CONNECT als host-Header gesendet.
Broker-ErweiterungenActiveMQ_OptionsActiveMQ-spezifische Header, als published Property verfügbar.

Wie die Bytes zum Broker kommen

Jede Protokollkomponente hängt sich über ihre Eigenschaft Client an einen TsgcTCPClient. Dieser eine Träger liefert dir reines TCP und TLS, ohne dass du den Protokollcode änderst.

BereichDetail
Reines TCPWeise Client einen TsgcTCPClient zu, und das Protokoll läuft direkt über den Socket, auf dem nativen Port des Brokers.
WebSocketNicht in sgcMQ enthalten. Ein WebSocket-Träger, zum Beispiel MQTT über WebSocket oder Web-STOMP, benötigt den WebSocket-Client, der mit sgcWebSockets geliefert wird.
TLSTLSOptions auf dem Träger, wobei TLSOptions.IOHandler OpenSSL für plattformübergreifende Builds oder SChannel unter Windows auswählt.
Client-ZertifikateMutual TLS über dieselben TLSOptions, aus einer PEM-Datei, einem PKCS#12-Bundle oder dem Windows-Zertifikatspeicher.
ProxysUnterstützung für HTTP-CONNECT-Proxys auf dem Träger, damit auch ein Broker hinter einem Firmen-Proxy erreichbar ist.
ReconnectWatchDog auf dem Träger verbindet nach einem Abbruch neu, mit konfigurierbarem Intervall und konfigurierbarer Versuchsanzahl.
IPv6Vom Träger unterstützt, eine IPv6-Broker-Adresse braucht also keine zusätzliche Konfiguration.
ThreadingDas Lesen läuft in einem eigenen Thread. Setze die Notify-Einstellungen des Trägers, um Ereignisse für VCL- und FMX-Code auf den Haupt-Thread zu marshallen.

Spezifikationen, Compiler und Zielplattformen

Veröffentlichte Protokolle, und derselbe Quellcode über jeden unterstützten Compiler hinweg.

BereichDetail
MQTTOASIS MQTT 3.1.1 und MQTT 5.0.
AMQP 0.9.1Die Spezifikation AMQP 0-9-1: Channels, Exchanges, Queues, Bindings und die basic-Klasse.
AMQP 1.0OASIS AMQP 1.0, auch veröffentlicht als ISO/IEC 19464.
KafkaDas Wire-Protokoll von Apache Kafka über TCP, einschließlich des Record-Batch-Formats v2.
STOMPSTOMP 1.0, 1.1 und 1.2.
WebSocketNicht enthalten. Ein WebSocket-Träger erfordert sgcWebSockets, das den WebSocket-Client bereitstellt.
TLSTLS 1.2 und TLS 1.3 über OpenSSL oder Windows SChannel.
CompilerDelphi und C++ Builder 7 bis 13.
PlattformenWin32, Win64, Linux64, macOS, iOS und Android.
LizenzierungEigenständig. Die sgcWebSockets Core Runtime ist mitgeliefert und der vollständige Quellcode ist enthalten.
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Baue mit sgcMQ

Lade die kostenlose Testversion herunter und verbinde dich aus Delphi oder C++ Builder mit deinem Broker.