Matriz de características de sgcMQ: MQTT, AMQP, Kafka, STOMP | eSeGeCe

sgcMQ: matriz de características

Todo lo que hace sgcMQ, repartido entre los siete componentes cliente y las especificaciones que implementan. Cada capacidad funciona igual en Delphi y en C++ Builder, y todas las licencias incluyen el código fuente completo. Haz clic en un componente para ver su propia página con uso y ejemplos.

MQTT

3.1.1 y 5.0

AMQP

0.9.1 y 1.0

Kafka

Protocolo de red nativo

STOMP

1.0 / 1.1 / 1.2

Transporte y TLS

TCP plano y TLS

Estándares y plataformas

Delphi 7 a 13, C++ Builder

sgcMQ es autónomo. Se entrega con el runtime sgcWebSockets Core incluido, así que no es un complemento y no hay ninguna licencia base que comprar.

Transporte: TCP plano y TLS. sgcMQ se conecta sobre TCP plano y TLS. Si necesitas ejecutar el protocolo sobre WebSocket, por ejemplo MQTT sobre WebSocket o AMQP sobre WebSocket, hace falta un paquete sgcWebSockets, que es el que aporta el cliente WebSocket.

Todas las capacidades de las tablas siguientes se alcanzan a través del portador TCP en crudo TsgcTCPClient, que sgcMQ incluye de serie.

Siete componentes en la paleta

Cuatro familias de protocolos, registradas en la página de paleta SGC MQ.

ComponenteClaseFamiliaDescripción
MQTT ClientTsgcWSPClient_MQTTMQTTPublicación/suscripción MQTT 3.1.1 y 5.0: QoS 0/1/2, mensajes retenidos, Last Will and Testament, sesiones y propiedades de MQTT 5.
AMQP 0.9.1 ClientTsgcWSPClient_AMQPAMQPCanales, exchanges, colas y bindings, consumidores, confirmaciones, QoS de prefetch y transacciones.
AMQP 1.0 ClientTsgcWSPClient_AMQP1AMQPSesiones, enlaces emisores y receptores, control de flujo basado en créditos, autenticación SASL y utilidades de token CBS de Azure.
Kafka ClientTsgcWSPClient_KafkaKafkaProductor con acks y gzip, grupos de consumidores con rebalanceo y commit de offsets, administración de topics.
STOMP ClientTsgcWSPClient_STOMPSTOMPFrames STOMP 1.0/1.1/1.2: SEND, SUBSCRIBE, ACK, NACK, recibos, heart-beating y transacciones.
STOMP RabbitMQ ClientTsgcWSPClient_STOMP_RabbitMQSTOMPSTOMP afinado para RabbitMQ: utilidades de cola, topic, exchange, cola externa y cola temporal, sobre TCP o TLS.
STOMP ActiveMQ ClientTsgcWSPClient_STOMP_ActiveMQSTOMPSTOMP afinado para Apache ActiveMQ, con utilidades de cola y topic más una propiedad ActiveMQ_Options.

MQTT 3.1.1 y MQTT 5.0

El protocolo de publicación/suscripción del IoT, con toda la maquinaria de calidad de servicio expuesta en lugar de oculta.

Capacidad3.1.15.0Notas
Selección de versión del protocoloMQTTVersion acepta mqtt311 o mqtt5.
QoS 0, 1 y 2El intercambio de QoS 2 se expone como OnMQTTPubRec, OnMQTTPubRel y OnMQTTPubComp, no se oculta.
Mensajes retenidosEl flag de retención es el cuarto argumento de Publish.
Last Will and TestamentLastWillTestament lleva topic, mensaje, QoS y retención.
Suscripciones con comodines+ para un nivel, # para el resto del árbol.
SesionesEl argumento Session de OnMQTTConnect indica si el broker ha reanudado una.
Publicar y esperarPublishAndWait se bloquea hasta que el broker confirma el paquete.
Publicar un streamPublish tiene una sobrecarga TStream para payloads binarios.
Códigos de motivo y nombresMQTT 5 devuelve un código de motivo numérico y su nombre en CONNACK y DISCONNECT.
Propiedades de CONNECTConnectProperties fija la caducidad de sesión, el máximo de recepción, el tamaño máximo de paquete y el máximo de alias de topic.
Alias de topicUn entero corto sustituye a un nombre de topic largo en la red, y se resuelve automáticamente en los paquetes entrantes.
Propiedades de usuarioPares clave/valor arbitrarios viajan con CONNECT, PUBLISH, SUBSCRIBE y DISCONNECT.
Suscripciones compartidasSuscríbete a $share/<group>/<topic> para repartir las entregas entre un grupo de clientes.
Autenticación mejoradaEl viaje de ida y vuelta del paquete AUTH mediante Auth y OnMQTTAuth, para esquemas de desafío/respuesta.
Keep-aliveHeartBeat gobierna PINGREQ, y OnMQTTPing se dispara con la respuesta.

AMQP 0.9.1 y AMQP 1.0

Dos protocolos que comparten el nombre y nada más, así que sgcMQ trae un componente distinto para cada uno en vez de fingir que una sola API vale para ambos.

CapacidadAMQP 0.9.1AMQP 1.0Notas
ComponenteTsgcWSPClient_AMQPTsgcWSPClient_AMQP1Formato de red distinto, modelo de objetos distinto, componente distinto.
Unidad de multiplexaciónCanalSesiónOpenChannel frente a CreateSession.
Declaración de topologíaDeclareExchange, DeclareQueue, BindQueueAMQP 1.0 direcciona nodos del broker en lugar de declararlos.
EnvíoPublishMessage(channel, exchange, routingKey, body)SendMessage(session, link, text)Routing key en 0.9.1, dirección de destino en 1.0.
RecepciónConsume y luego OnAMQPBasicDeliverCreateReceiverLink y luego OnAMQPMessageAmbos funcionan por push una vez establecidos.
ConfirmaciónAckMessage / RejectMessageOnAMQPMessageSentAck0.9.1 confirma una etiqueta de entrega, 1.0 liquida una entrega.
Control de flujoPrefetch con SetQoS, EnableChannel / DisableChannelBasado en créditos (CreditSize, WindowSize)Ambos evitan que un productor rápido desborde a un consumidor lento.
TransaccionesSelectTransaction, CommitTransaction, RollbackTransactionLa clase tx de 0.9.1, expuesta por canal.
Mantenimiento de colasPurgeQueue, DeleteQueue, DeleteExchange, UnBindQueueCloseLink, CloseSessionCada una con una variante bloqueante ...Ex que espera la respuesta del broker.
ReentregaRecover / RecoverAsyncPide al broker que reentregue los mensajes sin confirmar.
AutenticaciónOnAMQPAuthentication, OnAMQPChallengeAuthentication.AuthType, OnAMQPSASLAuthentication1.0 ofrece SASL ANONYMOUS, PLAIN y EXTERNAL.
Utilidades cloudCreateCBSLink, PutCBSToken, CreateAzureCbsSasToken, CreateAzureCbsJWTClaims-Based Security para Azure Service Bus y Event Hubs.
Comprobación de actividadHeartBeatPing, AMQPOptions.IdleTimeoutSe negocia con el broker al conectar.
Ajuste de la conexiónAMQPOptions.VirtualHost, MaxChannels, MaxFrameSize, LocaleAMQPOptions.ContainerId, ChannelMax, MaxFrameSize, MaxLinksPerSessionSe envían en el handshake de apertura y se negocian con el broker.
PrefetchSetQoS(channel, prefetchSize, prefetchCount, global)AMQPOptions.CreditSizeCuántos mensajes sin confirmar puede tener el broker en vuelo.
Inspección de framesOnAMQPBeforeReadFrame, OnAMQPBeforeWriteFrameConsulta o reescribe los frames en crudo antes de procesarlos o enviarlos.

Apache Kafka, hablado directamente

El protocolo binario de Kafka implementado en Object Pascal, sin proxy REST delante ni librdkafka debajo.

CapacidadAPINotas
Producir un registroProduce(topic, value, key, partition)La clave y la partición son opcionales. ProduceBytes acepta TBytes para ambas.
Producir un loteProduceMessages(topic, partition, messages)Devuelve la respuesta de producción del broker para todo el lote.
Garantía de entregaKafkaOptions.Producer.AckskafkaAcksNone, kafkaAcksLeader o kafkaAcksAll.
CompresiónKafkaOptions.Producer.CompressionkafkaCompressionNone o kafkaCompressionGzip.
ConsumirSubscribe([topics]) y luego Poll(timeoutMs)Poll devuelve una lista TsgcKafkaMessages y además dispara OnKafkaMessage por cada registro.
Grupos de consumidoresKafkaOptions.Consumer.GroupIdEl descubrimiento del coordinador, el join, el sync y el heartbeat se gestionan por ti. OnKafkaRebalance informa de los cambios de asignación.
Política de offsetsKafkaOptions.Consumer.OffsetResetkafkaOffsetEarliest o kafkaOffsetLatest cuando no hay ningún offset confirmado.
Confirmar offsetsCommitSync, CommitOffset(topic, partition, offset)O activa Consumer.AutoCommit con AutoCommitIntervalMs.
Leer una partición directamenteFetchMessages(topic, partition, offset, maxBytes)Se salta por completo el grupo de consumidores.
Consulta de offsetsGetEarliestOffset, GetLatestOffset, GetCommittedOffsetPor topic y partición.
Ajuste del fetchConsumer.MinBytes, MaxBytes, MaxPartitionBytes, MaxWaitMsEquilibra la latencia frente al tamaño del lote.
Administración de topicsCreateTopic, DeleteTopic, GetMetadataNúmero de particiones y factor de replicación al crearlos.
Administración de gruposListGroups, DescribeGroupsInspecciona los grupos de consumidores desde tus propias herramientas.
Sondeo de capacidades del brokerGetApiVersionsPregunta al broker qué versiones de la API del protocolo admite.
SASLkafkaSaslNone, kafkaSaslPlainAutenticación SASL/PLAIN con usuario y contraseña.

STOMP 1.0, 1.1 y 1.2

Un cliente genérico más dos descendientes específicos de broker que convierten las convenciones de destino de RabbitMQ y ActiveMQ en métodos con nombre.

CapacidadSTOMPRabbitMQActiveMQNotas
Enviar un frameSendPublishExPublishExDestino, cuerpo, tipo de contenido y transacción opcional.
SuscribirseSubscribe(id, destination)SubscribeExSubscribeExLos descendientes añaden argumentos de durabilidad, exclusividad y modo de ack.
Utilidades de colaSubscribeQueue, PublishQueue, UnSubscribeQueueSubscribeQueue, PublishQueue, UnSubscribeQueueEl prefijo de destino /queue/, ya encapsulado.
Utilidades de topicSubscribeTopic, PublishTopic, UnSubscribeTopicSubscribeTopic, PublishTopic, UnSubscribeTopicEl prefijo de destino /topic/, ya encapsulado.
Utilidades de exchangeSubscribeExchange, PublishExchangeEl destino /exchange/ de RabbitMQ con un patrón de enrutamiento.
Colas externasSubscribeQueueOutside, PublishQueueOutsideEl /amq/queue/ de RabbitMQ, para colas declaradas en otro sitio.
Colas de respuesta temporalesSubscribeTemporaryQueue, PublishTemporaryQueueEl patrón petición/respuesta /temp-queue/ de RabbitMQ.
ConfirmarACK / NACKModo de ack elegido por suscripción (ackAuto y compañía).
TransaccionesBeginTransaction, CommitTransaction, AbortTransactionAgrupa varios frames SEND y ACK en una única unidad atómica.
RecibosOnSTOMPReceiptOnRabbitMQReceiptOnActiveMQReceiptEl broker confirma un frame que ha procesado.
Evento de mensajeOnSTOMPMessageOnRabbitMQMessageOnActiveMQMessageEntrega el destino, el cuerpo y las cabeceras del frame.
Heart-beatingHeartBeat, PingSe negocia en el frame CONNECT, en ambos sentidos.
Negociación de versiónVersions.V1_0, V1_1, V1_2Anuncia las versiones que aceptas y el broker elige una.
Virtual hostOptions.VirtualHostSe envía como cabecera host en CONNECT.
Extensiones del brokerActiveMQ_OptionsCabeceras específicas de ActiveMQ, expuestas como propiedad publicada.

Cómo llegan los bytes al broker

Cada componente de protocolo se engancha a un TsgcTCPClient mediante su propiedad Client. Ese único portador te da TCP plano y TLS sin cambiar el código del protocolo.

ÁreaDetalle
TCP planoAsigna un TsgcTCPClient a Client y el protocolo corre directamente sobre el socket, en el puerto nativo del broker.
WebSocketNo está en sgcMQ. Un portador WebSocket, por ejemplo MQTT sobre WebSocket o Web-STOMP, necesita el cliente WebSocket que se entrega con sgcWebSockets.
TLSTLSOptions en el portador, con TLSOptions.IOHandler para elegir OpenSSL en compilaciones multiplataforma o SChannel en Windows.
Certificados de clienteTLS mutuo con las mismas TLSOptions, desde un archivo PEM, un paquete PKCS#12 o el almacén de certificados de Windows.
ProxiesSoporte de proxy HTTP CONNECT en el portador, para llegar a un broker que está detrás de un proxy corporativo.
ReconexiónWatchDog en el portador reconecta tras una caída del enlace, con intervalo y número de intentos configurables.
IPv6Compatible en el portador, así que una dirección de broker IPv6 no necesita configuración adicional.
HilosLa lectura corre en su propio hilo. Ajusta las opciones de notificación del portador para llevar los eventos al hilo principal en código VCL y FMX.

Especificaciones, compiladores y destinos

Protocolos publicados, y el mismo código fuente en todos los compiladores compatibles.

ÁreaDetalle
MQTTOASIS MQTT 3.1.1 y MQTT 5.0.
AMQP 0.9.1La especificación AMQP 0-9-1: canales, exchanges, colas, bindings y la clase basic.
AMQP 1.0OASIS AMQP 1.0, publicada también como ISO/IEC 19464.
KafkaEl protocolo de red de Apache Kafka sobre TCP, incluido el formato de lote de registros v2.
STOMPSTOMP 1.0, 1.1 y 1.2.
WebSocketNo incluido. Un portador WebSocket requiere sgcWebSockets, que es quien aporta el cliente WebSocket.
TLSTLS 1.2 y TLS 1.3 mediante OpenSSL, o SChannel en Windows.
CompiladoresDelphi y C++ Builder 7 a 13.
PlataformasWin32, Win64, Linux64, macOS, iOS y Android.
LicenciasProducto independiente. Lleva incluido el runtime sgcWebSockets Core y el código fuente completo.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

Crea con sgcMQ

Descarga la prueba gratuita y conecta con tu broker desde Delphi o C++ Builder.