Matrice des fonctionnalités sgcMQ : MQTT, AMQP, Kafka, STOMP | eSeGeCe

sgcMQ matrice des fonctionnalités

Tout ce que fait sgcMQ, réparti sur les sept composants clients et les spécifications qu'ils implémentent. Chaque capacité fonctionne de la même façon en Delphi et en C++ Builder, et chaque licence est livrée avec le code source complet. Clique sur un composant pour ouvrir sa page dédiée avec son utilisation et des exemples.

MQTT

3.1.1 et 5.0

AMQP

0.9.1 et 1.0

Kafka

Protocole binaire natif

STOMP

1.0 / 1.1 / 1.2

Transport et TLS

TCP simple et TLS

Standards et plateformes

Delphi 7 à 13, C++ Builder

sgcMQ est autonome. Il est livré avec le runtime sgcWebSockets Core inclus, ce n'est donc pas un complément et il n'y a aucune licence de base à acheter.

Transport : TCP simple et TLS. sgcMQ se connecte en TCP simple et en TLS. Si tu as besoin de faire tourner le protocole sur WebSocket, par exemple MQTT sur WebSocket ou AMQP sur WebSocket, cela nécessite un package sgcWebSockets, qui fournit le client WebSocket.

Toutes les capacités des tableaux ci-dessous passent par le support de transport TCP brut TsgcTCPClient, que sgcMQ livre dans la boîte.

Sept composants de palette

Quatre familles de protocoles, enregistrées sur la page de palette SGC MQ.

ComposantClasseFamilleDescription
Client MQTTTsgcWSPClient_MQTTMQTTPublication et abonnement MQTT 3.1.1 et 5.0 : QoS 0/1/2, messages retenus, Last Will and Testament, sessions et propriétés MQTT 5.
Client AMQP 0.9.1TsgcWSPClient_AMQPAMQPCanaux, exchanges, files d'attente et liaisons, consommateurs, acquittements, QoS de prélecture et transactions.
Client AMQP 1.0TsgcWSPClient_AMQP1AMQPSessions, liens émetteurs et récepteurs, contrôle de flux par crédits, authentification SASL et utilitaires de jetons CBS pour Azure.
Client KafkaTsgcWSPClient_KafkaKafkaProducteur avec acquittements et gzip, groupes de consommateurs avec rééquilibrage et validation des offsets, administration des topics.
Client STOMPTsgcWSPClient_STOMPSTOMPTrames STOMP 1.0/1.1/1.2 : SEND, SUBSCRIBE, ACK, NACK, accusés de réception, heart-beating et transactions.
Client STOMP RabbitMQTsgcWSPClient_STOMP_RabbitMQSTOMPSTOMP réglé pour RabbitMQ : utilitaires de file d'attente, topic, exchange, file externe et file temporaire, en TCP ou TLS.
Client STOMP ActiveMQTsgcWSPClient_STOMP_ActiveMQSTOMPSTOMP réglé pour Apache ActiveMQ, avec des utilitaires de files d'attente et de topics, plus une propriété ActiveMQ_Options.

MQTT 3.1.1 et MQTT 5.0

Le protocole de publication et d'abonnement de l'IoT, avec toute la mécanique de qualité de service exposée plutôt que cachée.

Capacité3.1.15.0Notes
Choix de la version du protocoleMQTTVersion accepte mqtt311 ou mqtt5.
QoS 0, 1 et 2L'échange QoS 2 est exposé via OnMQTTPubRec, OnMQTTPubRel et OnMQTTPubComp, pas escamoté.
Messages retenusL'indicateur de rétention est le quatrième argument de Publish.
Last Will and TestamentLastWillTestament porte le topic, le message, la QoS et la rétention.
Abonnements avec jokers+ pour un niveau, # pour le reste de l'arborescence.
SessionsL'argument Session d'OnMQTTConnect indique si le broker en a repris une.
Publier et attendrePublishAndWait bloque jusqu'à ce que le broker acquitte le paquet.
Publier un fluxPublish possède une surcharge TStream pour les charges utiles binaires.
Codes et noms de raisonMQTT 5 renvoie un code de raison numérique et son nom sur CONNACK et DISCONNECT.
Propriétés CONNECTConnectProperties règle l'expiration de session, le maximum en réception, la taille maximale de paquet et le maximum d'alias de topics.
Alias de topicsUn entier court remplace un nom de topic long sur le fil, résolu automatiquement sur les paquets entrants.
Propriétés utilisateurDes paires clé/valeur arbitraires voyagent avec CONNECT, PUBLISH, SUBSCRIBE et DISCONNECT.
Abonnements partagésAbonne-toi à $share/<group>/<topic> pour répartir les livraisons sur un groupe de clients.
Authentification enrichieL'aller-retour du paquet AUTH via Auth et OnMQTTAuth, pour les schémas défi/réponse.
Keep-aliveHeartBeat pilote PINGREQ, avec OnMQTTPing déclenché à la réponse.

AMQP 0.9.1 et AMQP 1.0

Deux protocoles qui partagent un nom et rien d'autre, sgcMQ livre donc un composant distinct pour chacun plutôt que de prétendre qu'une seule API convient aux deux.

CapacitéAMQP 0.9.1AMQP 1.0Notes
ComposantTsgcWSPClient_AMQPTsgcWSPClient_AMQP1Format binaire différent, modèle d'objets différent, composant différent.
Unité de multiplexageCanalSessionOpenChannel face à CreateSession.
Déclaration de topologieDeclareExchange, DeclareQueue, BindQueueAMQP 1.0 adresse des nœuds sur le broker au lieu de les déclarer.
EnvoiPublishMessage(channel, exchange, routingKey, body)SendMessage(session, link, text)Clé de routage en 0.9.1, adresse cible en 1.0.
RéceptionConsume puis OnAMQPBasicDeliverCreateReceiverLink puis OnAMQPMessageLes deux fonctionnent en push une fois établis.
AcquittementAckMessage / RejectMessageOnAMQPMessageSentAck0.9.1 acquitte une étiquette de livraison, 1.0 règle une livraison.
Contrôle de fluxPrélecture SetQoS, EnableChannel / DisableChannelPar crédits (CreditSize, WindowSize)Les deux empêchent un producteur rapide de submerger un consommateur lent.
TransactionsSelectTransaction, CommitTransaction, RollbackTransactionLa classe tx de 0.9.1, exposée par canal.
Maintenance des filesPurgeQueue, DeleteQueue, DeleteExchange, UnBindQueueCloseLink, CloseSessionChacune avec une variante bloquante ...Ex qui attend la réponse du broker.
RelivraisonRecover / RecoverAsyncDemander au broker de relivrer les messages non acquittés.
AuthentificationOnAMQPAuthentication, OnAMQPChallengeAuthentication.AuthType, OnAMQPSASLAuthentication1.0 propose SASL ANONYMOUS, PLAIN et EXTERNAL.
Utilitaires cloudCreateCBSLink, PutCBSToken, CreateAzureCbsSasToken, CreateAzureCbsJWTClaims-Based Security pour Azure Service Bus et Event Hubs.
Maintien en vieHeartBeatPing, AMQPOptions.IdleTimeoutNégocié avec le broker à la connexion.
Réglage de la connexionAMQPOptions.VirtualHost, MaxChannels, MaxFrameSize, LocaleAMQPOptions.ContainerId, ChannelMax, MaxFrameSize, MaxLinksPerSessionEnvoyé dans la poignée de main d'ouverture et négocié avec le broker.
PrélectureSetQoS(channel, prefetchSize, prefetchCount, global)AMQPOptions.CreditSizeCombien de messages non acquittés le broker peut avoir en vol.
Inspection des tramesOnAMQPBeforeReadFrame, OnAMQPBeforeWriteFrameVoir ou réécrire les trames brutes avant leur traitement ou leur envoi.

Apache Kafka, parlé directement

Le protocole binaire de Kafka implémenté en Object Pascal, sans proxy REST devant ni librdkafka en dessous.

CapacitéAPINotes
Produire un enregistrementProduce(topic, value, key, partition)La clé et la partition sont facultatives. ProduceBytes accepte des TBytes pour les deux.
Produire un lotProduceMessages(topic, partition, messages)Renvoie la réponse de production du broker pour tout le lot.
Garantie de livraisonKafkaOptions.Producer.AckskafkaAcksNone, kafkaAcksLeader ou kafkaAcksAll.
CompressionKafkaOptions.Producer.CompressionkafkaCompressionNone ou kafkaCompressionGzip.
ConsommerSubscribe([topics]) puis Poll(timeoutMs)Poll renvoie une liste TsgcKafkaMessages et déclenche aussi OnKafkaMessage par enregistrement.
Groupes de consommateursKafkaOptions.Consumer.GroupIdLa découverte du coordinateur, l'adhésion, la synchronisation et le heartbeat sont pris en charge pour toi. OnKafkaRebalance signale les changements d'affectation.
Politique d'offsetKafkaOptions.Consumer.OffsetResetkafkaOffsetEarliest ou kafkaOffsetLatest lorsqu'aucun offset n'est validé.
Valider les offsetsCommitSync, CommitOffset(topic, partition, offset)Ou active Consumer.AutoCommit avec AutoCommitIntervalMs.
Lire une partition directementFetchMessages(topic, partition, offset, maxBytes)Contourne entièrement le groupe de consommateurs.
Consultation des offsetsGetEarliestOffset, GetLatestOffset, GetCommittedOffsetPar topic et par partition.
Réglage de la récupérationConsumer.MinBytes, MaxBytes, MaxPartitionBytes, MaxWaitMsArbitrer entre latence et taille de lot.
Administration des topicsCreateTopic, DeleteTopic, GetMetadataNombre de partitions et facteur de réplication à la création.
Administration des groupesListGroups, DescribeGroupsInspecter les groupes de consommateurs depuis tes propres outils.
Sonde des capacités du brokerGetApiVersionsDemander au broker quelles versions d'API du protocole il prend en charge.
SASLkafkaSaslNone, kafkaSaslPlainAuthentification SASL/PLAIN par nom d'utilisateur et mot de passe.

STOMP 1.0, 1.1 et 1.2

Un client générique plus deux descendants propres à un broker, qui transforment les conventions de destination de RabbitMQ et d'ActiveMQ en méthodes nommées.

CapacitéSTOMPRabbitMQActiveMQNotes
Envoyer une trameSendPublishExPublishExDestination, corps, type de contenu et transaction facultative.
S'abonnerSubscribe(id, destination)SubscribeExSubscribeExLes descendants ajoutent les arguments durable, exclusive et mode d'acquittement.
Utilitaires de files d'attenteSubscribeQueue, PublishQueue, UnSubscribeQueueSubscribeQueue, PublishQueue, UnSubscribeQueueLe préfixe de destination /queue/, encapsulé.
Utilitaires de topicsSubscribeTopic, PublishTopic, UnSubscribeTopicSubscribeTopic, PublishTopic, UnSubscribeTopicLe préfixe de destination /topic/, encapsulé.
Utilitaires d'exchangesSubscribeExchange, PublishExchangeLa destination /exchange/ de RabbitMQ avec un motif de routage.
Files externesSubscribeQueueOutside, PublishQueueOutsideLe /amq/queue/ de RabbitMQ, pour des files déclarées ailleurs.
Files de réponse temporairesSubscribeTemporaryQueue, PublishTemporaryQueueLe motif requête/réponse /temp-queue/ de RabbitMQ.
AcquitterACK / NACKMode d'acquittement choisi par abonnement (ackAuto et compagnie).
TransactionsBeginTransaction, CommitTransaction, AbortTransactionRegrouper plusieurs trames SEND et ACK en une unité atomique.
Accusés de réceptionOnSTOMPReceiptOnRabbitMQReceiptOnActiveMQReceiptLe broker confirme une trame qu'il a traitée.
Événement de messageOnSTOMPMessageOnRabbitMQMessageOnActiveMQMessageLivre la destination, le corps et les en-têtes de la trame.
Heart-beatingHeartBeat, PingNégocié dans la trame CONNECT, dans les deux sens.
Négociation de versionVersions.V1_0, V1_1, V1_2Annonce les versions que tu acceptes, le broker en choisit une.
Hôte virtuelOptions.VirtualHostEnvoyé comme en-tête host sur CONNECT.
Extensions du brokerActiveMQ_OptionsEn-têtes propres à ActiveMQ, exposés comme propriété publiée.

Comment les octets arrivent au broker

Chaque composant de protocole s'attache à un TsgcTCPClient via sa propriété Client. Ce seul support de transport te donne le TCP simple et le TLS sans changer le code du protocole.

DomaineDétail
TCP simpleAssigne un TsgcTCPClient à Client et le protocole tourne directement sur le socket, sur le port natif du broker.
WebSocketPas dans sgcMQ. Un support WebSocket, par exemple MQTT sur WebSocket ou Web-STOMP, nécessite le client WebSocket livré avec sgcWebSockets.
TLSTLSOptions sur le support de transport, avec TLSOptions.IOHandler qui choisit OpenSSL pour les compilations multiplateformes ou SChannel sous Windows.
Certificats clientTLS mutuel via les mêmes TLSOptions, depuis un fichier PEM, un conteneur PKCS#12 ou le magasin de certificats de Windows.
ProxysPrise en charge du proxy HTTP CONNECT sur le support de transport, un broker derrière un proxy d'entreprise reste donc joignable.
ReconnexionWatchDog sur le support de transport reconnecte après une coupure, avec un intervalle et un nombre de tentatives configurables.
IPv6Pris en charge par le support de transport, une adresse de broker IPv6 ne demande donc aucune configuration supplémentaire.
ThreadsLa lecture tourne sur son propre thread. Règle les paramètres de notification du support de transport pour rapatrier les événements sur le thread principal, en VCL comme en FMX.

Spécifications, compilateurs et cibles

Des protocoles publiés, et le même source sur chaque compilateur pris en charge.

DomaineDétail
MQTTOASIS MQTT 3.1.1 et MQTT 5.0.
AMQP 0.9.1La spécification AMQP 0-9-1 : canaux, exchanges, files d'attente, liaisons et la classe basic.
AMQP 1.0OASIS AMQP 1.0, également publié sous la référence ISO/IEC 19464.
KafkaLe protocole binaire d'Apache Kafka sur TCP, y compris le format de lot d'enregistrements v2.
STOMPSTOMP 1.0, 1.1 et 1.2.
WebSocketNon inclus. Un support WebSocket nécessite sgcWebSockets, qui fournit le client WebSocket.
TLSTLS 1.2 et TLS 1.3 via OpenSSL, ou SChannel de Windows.
CompilateursDelphi et C++ Builder 7 à 13.
PlateformesWin32, Win64, Linux64, macOS, iOS et Android.
LicenceAutonome. Le runtime sgcWebSockets Core est inclus et le code source complet est fourni.
Meilleur rapport qualité-prix : All-AccessTous les produits eSeGeCe, Support Premium inclus, à partir de €1,059/an.
Voir les tarifs All-Access

Construis avec sgcMQ

Télécharge l'essai gratuit et connecte-toi à ton broker depuis Delphi ou C++ Builder.