sgcMQ-functiematrix: MQTT, AMQP, Kafka, STOMP | eSeGeCe

sgcMQ-functiematrix

Alles wat sgcMQ doet, uitgesplitst over de zeven clientcomponenten en de specificaties die ze implementeren. Elke mogelijkheid werkt hetzelfde in Delphi en C++ Builder, en elke licentie bevat de volledige broncode. Klik op een component voor de eigen pagina met gebruik en voorbeelden.

MQTT

3.1.1 en 5.0

AMQP

0.9.1 en 1.0

Kafka

Native wireprotocol

STOMP

1.0 / 1.1 / 1.2

Transport en TLS

Gewoon TCP en TLS

Standaarden en platforms

Delphi 7 tot 13, C++ Builder

sgcMQ is zelfstandig. De sgcWebSockets Core-runtime wordt meegeleverd, dus het is geen add-on en er is geen basislicentie die je moet kopen.

Transport: gewoon TCP en TLS. sgcMQ verbindt via gewoon TCP en TLS. Wil je het protocol over WebSocket draaien, bijvoorbeeld MQTT over WebSocket of AMQP over WebSocket, dan heb je een sgcWebSockets-pakket nodig, dat de WebSocket-client levert.

Elke mogelijkheid in de tabellen hieronder loopt over de kale TCP-drager TsgcTCPClient, die sgcMQ standaard meelevert.

Zeven paletcomponenten

Vier protocolfamilies, geregistreerd op de paletpagina SGC MQ.

ComponentKlasseFamilieBeschrijving
MQTT ClientTsgcWSPClient_MQTTMQTTMQTT 3.1.1 en 5.0 publish/subscribe: QoS 0/1/2, retained messages, Last Will and Testament, sessies en MQTT 5-properties.
AMQP 0.9.1 ClientTsgcWSPClient_AMQPAMQPChannels, exchanges, wachtrijen en bindings, consumers, bevestigingen, prefetch-QoS en transacties.
AMQP 1.0 ClientTsgcWSPClient_AMQP1AMQPSessies, sender- en receiverlinks, kredietgebaseerde flow control, SASL-authenticatie en helpers voor Azure CBS-tokens.
Kafka ClientTsgcWSPClient_KafkaKafkaProducer met acks en gzip, consumergroepen met rebalance en offset-commits, topicbeheer.
STOMP ClientTsgcWSPClient_STOMPSTOMPSTOMP 1.0/1.1/1.2-frames: SEND, SUBSCRIBE, ACK, NACK, receipts, heart-beating en transacties.
STOMP RabbitMQ ClientTsgcWSPClient_STOMP_RabbitMQSTOMPSTOMP afgestemd op RabbitMQ: helpers voor queue, topic, exchange, externe queue en tijdelijke queue, via TCP of TLS.
STOMP ActiveMQ ClientTsgcWSPClient_STOMP_ActiveMQSTOMPSTOMP afgestemd op Apache ActiveMQ, met helpers voor queue en topic plus een ActiveMQ_Options-eigenschap.

MQTT 3.1.1 en MQTT 5.0

Het publish/subscribe-protocol van IoT, waarbij de volledige quality-of-service-machinerie zichtbaar is in plaats van verborgen.

Mogelijkheid3.1.15.0Opmerkingen
Protocolversie kiezenMQTTVersion accepteert mqtt311 of mqtt5.
QoS 0, 1 en 2De QoS 2-uitwisseling wordt zichtbaar gemaakt als OnMQTTPubRec, OnMQTTPubRel en OnMQTTPubComp, niet weggemoffeld.
Retained messagesDe retain-vlag is het vierde argument van Publish.
Last Will and TestamentLastWillTestament bevat topic, bericht, QoS en retain.
Wildcard-abonnementen+ voor één niveau, # voor de rest van de boom.
SessiesHet argument Session van OnMQTTConnect meldt of de broker er een heeft hervat.
Publiceren en wachtenPublishAndWait blokkeert totdat de broker het pakket bevestigt.
Een stream publicerenPublish heeft een TStream-overload voor binaire payloads.
Reason codes en namenMQTT 5 geeft bij CONNACK en DISCONNECT een numerieke reason code en de bijbehorende naam terug.
CONNECT-propertiesConnectProperties stelt session expiry, receive maximum, maximale pakketgrootte en topic alias maximum in.
Topic-aliassenEen kort geheel getal vervangt een lange topicnaam op de lijn, en wordt bij binnenkomende pakketten automatisch weer omgezet.
User propertiesWillekeurige sleutel/waarde-paren reizen mee met CONNECT, PUBLISH, SUBSCRIBE en DISCONNECT.
Gedeelde abonnementenAbonneer je op $share/<group>/<topic> om afleveringen over een groep clients te verdelen.
Uitgebreide authenticatieDe heen-en-weerreis van het AUTH-pakket via Auth en OnMQTTAuth, voor challenge/response-schema's.
Keep-aliveHeartBeat stuurt PINGREQ aan, waarbij OnMQTTPing bij het antwoord wordt aangeroepen.

AMQP 0.9.1 en AMQP 1.0

Twee protocollen die alleen een naam delen en verder niets, dus sgcMQ levert voor elk een apart component in plaats van te doen alsof één API voor beide past.

MogelijkheidAMQP 0.9.1AMQP 1.0Opmerkingen
ComponentTsgcWSPClient_AMQPTsgcWSPClient_AMQP1Ander wireformaat, ander objectmodel, ander component.
Eenheid van multiplexenChannelSessionOpenChannel tegenover CreateSession.
Topologie declarerenDeclareExchange, DeclareQueue, BindQueueAMQP 1.0 adresseert nodes op de broker in plaats van ze te declareren.
VerzendenPublishMessage(channel, exchange, routingKey, body)SendMessage(session, link, text)Routing key bij 0.9.1, doeladres bij 1.0.
OntvangenConsume en daarna OnAMQPBasicDeliverCreateReceiverLink en daarna OnAMQPMessageBeide werken push-gebaseerd zodra ze zijn opgezet.
BevestigingAckMessage / RejectMessageOnAMQPMessageSentAck0.9.1 bevestigt een delivery tag, 1.0 settelt een delivery.
Flow controlSetQoS-prefetch, EnableChannel / DisableChannelKredietgebaseerd (CreditSize, WindowSize)Beide voorkomen dat een snelle producer een trage consumer overspoelt.
TransactiesSelectTransaction, CommitTransaction, RollbackTransactionDe tx-klasse van 0.9.1, per channel beschikbaar.
Onderhoud van wachtrijenPurgeQueue, DeleteQueue, DeleteExchange, UnBindQueueCloseLink, CloseSessionElk met een blokkerende ...Ex-variant die op het antwoord van de broker wacht.
Opnieuw afleverenRecover / RecoverAsyncVraag de broker om onbevestigde berichten opnieuw af te leveren.
AuthenticatieOnAMQPAuthentication, OnAMQPChallengeAuthentication.AuthType, OnAMQPSASLAuthentication1.0 biedt SASL ANONYMOUS, PLAIN en EXTERNAL.
CloudhelpersCreateCBSLink, PutCBSToken, CreateAzureCbsSasToken, CreateAzureCbsJWTClaims-Based Security voor Azure Service Bus en Event Hubs.
Verbinding levend houdenHeartBeatPing, AMQPOptions.IdleTimeoutWordt bij het verbinden met de broker onderhandeld.
Verbinding afstemmenAMQPOptions.VirtualHost, MaxChannels, MaxFrameSize, LocaleAMQPOptions.ContainerId, ChannelMax, MaxFrameSize, MaxLinksPerSessionWordt in de openingshandshake verstuurd en met de broker onderhandeld.
PrefetchSetQoS(channel, prefetchSize, prefetchCount, global)AMQPOptions.CreditSizeHoeveel onbevestigde berichten de broker onderweg mag hebben.
Frames inspecterenOnAMQPBeforeReadFrame, OnAMQPBeforeWriteFrameBekijk of herschrijf ruwe frames voordat ze worden verwerkt of verstuurd.

Apache Kafka, rechtstreeks gesproken

Het binaire Kafka-protocol geïmplementeerd in Object Pascal, zonder REST-proxy ervoor en zonder librdkafka eronder.

MogelijkheidAPIOpmerkingen
Een record producerenProduce(topic, value, key, partition)Key en partition zijn optioneel. ProduceBytes neemt voor beide TBytes.
Een batch producerenProduceMessages(topic, partition, messages)Geeft het produce-antwoord van de broker voor de hele batch terug.
AfleveringsgarantieKafkaOptions.Producer.AckskafkaAcksNone, kafkaAcksLeader of kafkaAcksAll.
CompressieKafkaOptions.Producer.CompressionkafkaCompressionNone of kafkaCompressionGzip.
ConsumerenSubscribe([topics]) en daarna Poll(timeoutMs)Poll geeft een TsgcKafkaMessages-lijst terug en roept daarnaast per record OnKafkaMessage aan.
ConsumergroepenKafkaOptions.Consumer.GroupIdHet vinden van de coördinator, join, sync en heartbeat worden voor je afgehandeld. OnKafkaRebalance meldt wijzigingen in de toewijzing.
OffsetbeleidKafkaOptions.Consumer.OffsetResetkafkaOffsetEarliest of kafkaOffsetLatest wanneer er geen vastgelegde offset is.
Offsets vastleggenCommitSync, CommitOffset(topic, partition, offset)Of stel Consumer.AutoCommit in met AutoCommitIntervalMs.
Een partitie rechtstreeks lezenFetchMessages(topic, partition, offset, maxBytes)Slaat de consumergroep volledig over.
Offsets opzoekenGetEarliestOffset, GetLatestOffset, GetCommittedOffsetPer topic en partitie.
Fetch afstemmenConsumer.MinBytes, MaxBytes, MaxPartitionBytes, MaxWaitMsWeeg latency af tegen batchgrootte.
TopicbeheerCreateTopic, DeleteTopic, GetMetadataAantal partities en replicatiefactor bij het aanmaken.
GroepsbeheerListGroups, DescribeGroupsInspecteer consumergroepen vanuit je eigen tooling.
Mogelijkheden van de broker opvragenGetApiVersionsVraag de broker welke protocol-API-versies hij ondersteunt.
SASLkafkaSaslNone, kafkaSaslPlainSASL/PLAIN-authenticatie met gebruikersnaam en wachtwoord.

STOMP 1.0, 1.1 en 1.2

Eén generieke client plus twee brokerspecifieke afgeleiden die de destination-conventies van RabbitMQ en ActiveMQ omzetten in methodes met een eigen naam.

MogelijkheidSTOMPRabbitMQActiveMQOpmerkingen
Een frame versturenSendPublishExPublishExDestination, body, contenttype en optionele transactie.
AbonnerenSubscribe(id, destination)SubscribeExSubscribeExDe afgeleiden voegen argumenten voor durable, exclusive en ack-mode toe.
Queue-helpersSubscribeQueue, PublishQueue, UnSubscribeQueueSubscribeQueue, PublishQueue, UnSubscribeQueueDe destination-prefix /queue/, ingepakt.
Topic-helpersSubscribeTopic, PublishTopic, UnSubscribeTopicSubscribeTopic, PublishTopic, UnSubscribeTopicDe destination-prefix /topic/, ingepakt.
Exchange-helpersSubscribeExchange, PublishExchangeDe /exchange/-destination van RabbitMQ met een routingpatroon.
Externe wachtrijenSubscribeQueueOutside, PublishQueueOutsideDe /amq/queue/ van RabbitMQ, voor wachtrijen die elders zijn gedeclareerd.
Tijdelijke antwoordwachtrijenSubscribeTemporaryQueue, PublishTemporaryQueueHet request/reply-patroon /temp-queue/ van RabbitMQ.
BevestigenACK / NACKAck-modus per abonnement gekozen (ackAuto en verwanten).
TransactiesBeginTransaction, CommitTransaction, AbortTransactionBundel meerdere SEND- en ACK-frames tot één atomaire eenheid.
ReceiptsOnSTOMPReceiptOnRabbitMQReceiptOnActiveMQReceiptDe broker bevestigt een frame dat hij heeft verwerkt.
Bericht-eventOnSTOMPMessageOnRabbitMQMessageOnActiveMQMessageLevert de destination, de body en de frameheaders.
Heart-beatingHeartBeat, PingOnderhandeld in het CONNECT-frame, in beide richtingen.
Versie-onderhandelingVersions.V1_0, V1_1, V1_2Geef aan welke versies je accepteert, de broker kiest er een.
Virtual hostOptions.VirtualHostWordt bij CONNECT als de host-header verstuurd.
BrokeruitbreidingenActiveMQ_OptionsActiveMQ-specifieke headers, beschikbaar als published property.

Hoe de bytes bij de broker komen

Elk protocolcomponent koppelt zich via de eigenschap Client aan een TsgcTCPClient. Die ene drager geeft je gewoon TCP en TLS zonder dat je de protocolcode aanpast.

GebiedDetail
Gewoon TCPWijs een TsgcTCPClient toe aan Client en het protocol loopt rechtstreeks over de socket, op de eigen poort van de broker.
WebSocketZit niet in sgcMQ. Een WebSocket-drager, bijvoorbeeld MQTT over WebSocket of Web-STOMP, vereist de WebSocket-client die bij sgcWebSockets wordt geleverd.
TLSTLSOptions op de drager, waarbij TLSOptions.IOHandler kiest tussen OpenSSL voor platformonafhankelijke builds of SChannel op Windows.
ClientcertificatenMutual TLS via dezelfde TLSOptions, vanuit een PEM-bestand, een PKCS#12-bundel of het certificaatarchief van Windows.
Proxy'sOndersteuning voor HTTP CONNECT-proxy's op de drager, zodat een broker achter een bedrijfsproxy bereikbaar is.
Opnieuw verbindenWatchDog op de drager maakt na een verbroken verbinding opnieuw verbinding, met een instelbaar interval en aantal pogingen.
IPv6Ondersteund door de drager, dus een IPv6-brokeradres vraagt geen extra configuratie.
ThreadingHet lezen draait op een eigen thread. Stel de notify-instellingen van de drager in om events voor VCL- en FMX-code naar de hoofdthread te sturen.

Specificaties, compilers en targets

Gepubliceerde protocollen, en dezelfde broncode voor elke ondersteunde compiler.

GebiedDetail
MQTTOASIS MQTT 3.1.1 en MQTT 5.0.
AMQP 0.9.1De AMQP 0-9-1-specificatie: channels, exchanges, wachtrijen, bindings en de basic class.
AMQP 1.0OASIS AMQP 1.0, ook gepubliceerd als ISO/IEC 19464.
KafkaHet Apache Kafka-wireprotocol over TCP, inclusief het v2 record batch-formaat.
STOMPSTOMP 1.0, 1.1 en 1.2.
WebSocketNiet inbegrepen. Een WebSocket-drager vereist sgcWebSockets, dat de WebSocket-client levert.
TLSTLS 1.2 en TLS 1.3 via OpenSSL, of Windows SChannel.
CompilersDelphi en C++ Builder 7 tot en met 13.
PlatformsWin32, Win64, Linux64, macOS, iOS en Android.
LicentiesStandalone. De sgcWebSockets Core-runtime is meegeleverd en de volledige broncode is inbegrepen.
De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Bouw met sgcMQ

Download de gratis proefversie en maak vanuit Delphi of C++ Builder verbinding met je broker.