Matriz de recursos do sgcMQ: MQTT, AMQP, Kafka, STOMP | eSeGeCe

sgcMQ matriz de recursos

Tudo o que o sgcMQ faz, mapeado nos sete componentes cliente e nas especificações que eles implementam. Cada recurso funciona igual no Delphi e no C++ Builder, e toda licença entrega o código-fonte completo. Clique em um componente para abrir a página dele, com uso e exemplos.

MQTT

3.1.1 e 5.0

AMQP

0.9.1 e 1.0

Kafka

Protocolo de rede nativo

STOMP

1.0 / 1.1 / 1.2

Transporte e TLS

TCP puro e TLS

Padrões e plataformas

Delphi 7 a 13, C++ Builder

O sgcMQ é autossuficiente. Ele já vem com o runtime sgcWebSockets Core embutido, portanto não é um complemento e não há licença base para comprar.

Transporte: TCP puro e TLS. O sgcMQ se conecta por TCP puro e TLS. Se você precisar rodar o protocolo sobre WebSocket, por exemplo MQTT sobre WebSocket ou AMQP sobre WebSocket, isso exige um pacote sgcWebSockets, que fornece o cliente WebSocket.

Todos os recursos das tabelas abaixo são acessados pelo transporte TCP puro TsgcTCPClient, que o sgcMQ já entrega na caixa.

Sete componentes de paleta

Quatro famílias de protocolos, registradas na página de paleta SGC MQ.

ComponenteClasseFamíliaDescrição
MQTT ClientTsgcWSPClient_MQTTMQTTPublicação e assinatura em MQTT 3.1.1 e 5.0: QoS 0/1/2, mensagens retidas, Last Will and Testament, sessões e propriedades do MQTT 5.
AMQP 0.9.1 ClientTsgcWSPClient_AMQPAMQPCanais, exchanges, filas e vínculos, consumidores, confirmações, QoS de prefetch e transações.
AMQP 1.0 ClientTsgcWSPClient_AMQP1AMQPSessões, links de envio e recebimento, controle de fluxo por crédito, autenticação SASL e utilitários de token CBS do Azure.
Kafka ClientTsgcWSPClient_KafkaKafkaProdutor com acks e gzip, grupos de consumidores com rebalanceamento e commit de offsets, administração de tópicos.
STOMP ClientTsgcWSPClient_STOMPSTOMPFrames STOMP 1.0/1.1/1.2: SEND, SUBSCRIBE, ACK, NACK, recibos, heartbeat e transações.
STOMP RabbitMQ ClientTsgcWSPClient_STOMP_RabbitMQSTOMPSTOMP ajustado para o RabbitMQ: utilitários de fila, tópico, exchange, fila externa e fila temporária, sobre TCP ou TLS.
STOMP ActiveMQ ClientTsgcWSPClient_STOMP_ActiveMQSTOMPSTOMP ajustado para o Apache ActiveMQ, com utilitários de fila e tópico mais uma propriedade ActiveMQ_Options.

MQTT 3.1.1 e MQTT 5.0

O protocolo de publicação e assinatura da IoT, com toda a mecânica de qualidade de serviço exposta em vez de escondida.

Recurso3.1.15.0Observações
Seleção da versão do protocoloMQTTVersion aceita mqtt311 ou mqtt5.
QoS 0, 1 e 2A troca de QoS 2 é exposta como OnMQTTPubRec, OnMQTTPubRel e OnMQTTPubComp, e não engolida.
Mensagens retidasO sinalizador de retenção é o quarto argumento de Publish.
Last Will and TestamentLastWillTestament carrega tópico, mensagem, QoS e retenção.
Assinaturas com curinga+ para um nível, # para o resto da árvore.
SessõesO argumento Session de OnMQTTConnect informa se o broker retomou uma sessão.
Publicar e aguardarPublishAndWait bloqueia até o broker confirmar o pacote.
Publicar um streamPublish tem uma sobrecarga TStream para cargas binárias.
Códigos e nomes de motivoO MQTT 5 retorna um código de motivo numérico e o nome dele no CONNACK e no DISCONNECT.
Propriedades de CONNECTConnectProperties define expiração de sessão, receive maximum, tamanho máximo de pacote e máximo de aliases de tópico.
Aliases de tópicoUm inteiro curto substitui um nome longo de tópico na rede, resolvido automaticamente nos pacotes de entrada.
Propriedades de usuárioPares chave/valor arbitrários viajam com CONNECT, PUBLISH, SUBSCRIBE e DISCONNECT.
Assinaturas compartilhadasAssine $share/<group>/<topic> para distribuir as entregas entre um grupo de clientes.
Autenticação aprimoradaO ciclo do pacote AUTH por meio de Auth e OnMQTTAuth, para esquemas de desafio e resposta.
Keep-aliveHeartBeat aciona o PINGREQ, com OnMQTTPing disparado na resposta.

AMQP 0.9.1 e AMQP 1.0

Dois protocolos que compartilham o nome e nada mais, então o sgcMQ entrega um componente separado para cada um em vez de fingir que uma única API serve para os dois.

RecursoAMQP 0.9.1AMQP 1.0Observações
ComponenteTsgcWSPClient_AMQPTsgcWSPClient_AMQP1Formato de rede diferente, modelo de objetos diferente, componente diferente.
Unidade de multiplexaçãoCanalSessãoOpenChannel contra CreateSession.
Declaração da topologiaDeclareExchange, DeclareQueue, BindQueueO AMQP 1.0 endereça nós no broker em vez de declará-los.
EnvioPublishMessage(channel, exchange, routingKey, body)SendMessage(session, link, text)Chave de roteamento no 0.9.1, endereço de destino no 1.0.
RecebimentoConsume e depois OnAMQPBasicDeliverCreateReceiverLink e depois OnAMQPMessageOs dois funcionam por push assim que estabelecidos.
ConfirmaçãoAckMessage / RejectMessageOnAMQPMessageSentAckO 0.9.1 confirma uma delivery tag, o 1.0 liquida uma entrega.
Controle de fluxoprefetch com SetQoS, EnableChannel / DisableChannelBaseado em crédito (CreditSize, WindowSize)Os dois impedem que um produtor rápido sobrecarregue um consumidor lento.
TransaçõesSelectTransaction, CommitTransaction, RollbackTransactionA classe tx do 0.9.1, exposta por canal.
Manutenção de filasPurgeQueue, DeleteQueue, DeleteExchange, UnBindQueueCloseLink, CloseSessionCada um com uma variante bloqueante ...Ex que aguarda a resposta do broker.
ReentregaRecover / RecoverAsyncPeça ao broker que reentregue mensagens não confirmadas.
AutenticaçãoOnAMQPAuthentication, OnAMQPChallengeAuthentication.AuthType, OnAMQPSASLAuthenticationO 1.0 oferece SASL ANONYMOUS, PLAIN e EXTERNAL.
Utilitários de nuvemCreateCBSLink, PutCBSToken, CreateAzureCbsSasToken, CreateAzureCbsJWTClaims-Based Security para Azure Service Bus e Event Hubs.
VitalidadeHeartBeatPing, AMQPOptions.IdleTimeoutNegociada com o broker na conexão.
Ajuste da conexãoAMQPOptions.VirtualHost, MaxChannels, MaxFrameSize, LocaleAMQPOptions.ContainerId, ChannelMax, MaxFrameSize, MaxLinksPerSessionEnviado no handshake de abertura e negociado com o broker.
PrefetchSetQoS(channel, prefetchSize, prefetchCount, global)AMQPOptions.CreditSizeQuantas mensagens não confirmadas o broker pode manter em trânsito.
Inspeção de framesOnAMQPBeforeReadFrame, OnAMQPBeforeWriteFrameVeja ou reescreva os frames brutos antes de serem processados ou enviados.

Apache Kafka, falado diretamente

O protocolo binário do Kafka implementado em Object Pascal, sem proxy REST na frente e sem librdkafka por baixo.

RecursoAPIObservações
Produzir um registroProduce(topic, value, key, partition)A chave e a partição são opcionais. ProduceBytes aceita TBytes para as duas.
Produzir um loteProduceMessages(topic, partition, messages)Retorna a resposta de produção do broker para o lote inteiro.
Garantia de entregaKafkaOptions.Producer.AckskafkaAcksNone, kafkaAcksLeader ou kafkaAcksAll.
CompressãoKafkaOptions.Producer.CompressionkafkaCompressionNone ou kafkaCompressionGzip.
ConsumirSubscribe([topics]) e depois Poll(timeoutMs)Poll retorna uma lista TsgcKafkaMessages e também dispara OnKafkaMessage a cada registro.
Grupos de consumidoresKafkaOptions.Consumer.GroupIdA descoberta do coordenador, a entrada, a sincronização e o heartbeat são tratados para você. OnKafkaRebalance informa mudanças de atribuição.
Política de offsetKafkaOptions.Consumer.OffsetResetkafkaOffsetEarliest ou kafkaOffsetLatest quando não há offset confirmado.
Confirmar offsetsCommitSync, CommitOffset(topic, partition, offset)Ou defina Consumer.AutoCommit com AutoCommitIntervalMs.
Ler uma partição diretamenteFetchMessages(topic, partition, offset, maxBytes)Ignora completamente o grupo de consumidores.
Consulta de offsetGetEarliestOffset, GetLatestOffset, GetCommittedOffsetPor tópico e por partição.
Ajuste do fetchConsumer.MinBytes, MaxBytes, MaxPartitionBytes, MaxWaitMsEquilibre latência contra tamanho do lote.
Administração de tópicosCreateTopic, DeleteTopic, GetMetadataNúmero de partições e fator de replicação na criação.
Administração de gruposListGroups, DescribeGroupsInspecione grupos de consumidores a partir das suas próprias ferramentas.
Sondagem de recursos do brokerGetApiVersionsPergunte ao broker quais versões da API do protocolo ele suporta.
SASLkafkaSaslNone, kafkaSaslPlainAutenticação SASL/PLAIN com nome de usuário e senha.

STOMP 1.0, 1.1 e 1.2

Um cliente genérico mais dois descendentes específicos de broker, que transformam as convenções de destino do RabbitMQ e do ActiveMQ em métodos nomeados.

RecursoSTOMPRabbitMQActiveMQObservações
Enviar um frameSendPublishExPublishExDestino, corpo, tipo de conteúdo e transação opcional.
AssinarSubscribe(id, destination)SubscribeExSubscribeExOs descendentes acrescentam argumentos de durabilidade, exclusividade e modo de confirmação.
Utilitários de filaSubscribeQueue, PublishQueue, UnSubscribeQueueSubscribeQueue, PublishQueue, UnSubscribeQueueO prefixo de destino /queue/, encapsulado.
Utilitários de tópicoSubscribeTopic, PublishTopic, UnSubscribeTopicSubscribeTopic, PublishTopic, UnSubscribeTopicO prefixo de destino /topic/, encapsulado.
Utilitários de exchangeSubscribeExchange, PublishExchangeO destino /exchange/ do RabbitMQ com um padrão de roteamento.
Filas externasSubscribeQueueOutside, PublishQueueOutsideO /amq/queue/ do RabbitMQ, para filas declaradas em outro lugar.
Filas temporárias de respostaSubscribeTemporaryQueue, PublishTemporaryQueueO padrão de requisição e resposta /temp-queue/ do RabbitMQ.
ConfirmarACK / NACKModo de confirmação escolhido por assinatura (ackAuto e afins).
TransaçõesBeginTransaction, CommitTransaction, AbortTransactionAgrupe vários frames SEND e ACK em uma única unidade atômica.
RecibosOnSTOMPReceiptOnRabbitMQReceiptOnActiveMQReceiptO broker confirma um frame que processou.
Evento de mensagemOnSTOMPMessageOnRabbitMQMessageOnActiveMQMessageEntrega o destino, o corpo e os cabeçalhos do frame.
HeartbeatHeartBeat, PingNegociado no frame CONNECT, nos dois sentidos.
Negociação de versãoVersions.V1_0, V1_1, V1_2Anuncie as versões que você aceita e o broker escolhe uma.
Host virtualOptions.VirtualHostEnviado como o cabeçalho host no CONNECT.
Extensões do brokerActiveMQ_OptionsCabeçalhos específicos do ActiveMQ, expostos como propriedade publicada.

Como os bytes chegam ao broker

Todo componente de protocolo se conecta a um TsgcTCPClient pela propriedade Client. Esse único transporte dá a você TCP puro e TLS sem mudar o código do protocolo.

ÁreaDetalhe
TCP puroAtribua um TsgcTCPClient a Client e o protocolo roda direto sobre o socket, na porta nativa do broker.
WebSocketNão está no sgcMQ. Um transporte WebSocket, por exemplo MQTT sobre WebSocket ou Web-STOMP, precisa do cliente WebSocket que vem com o sgcWebSockets.
TLSTLSOptions no transporte, com TLSOptions.IOHandler escolhendo OpenSSL para builds multiplataforma ou SChannel no Windows.
Certificados de clienteTLS mútuo pelas mesmas TLSOptions, a partir de um arquivo PEM, de um pacote PKCS#12 ou do repositório de certificados do Windows.
ProxiesSuporte a proxy HTTP CONNECT no transporte, então um broker atrás de um proxy corporativo fica acessível.
ReconexãoO WatchDog no transporte reconecta depois de uma queda do link, com intervalo e número de tentativas configuráveis.
IPv6Suportado pelo transporte, então um endereço de broker IPv6 não precisa de configuração extra.
ThreadsA leitura roda na própria thread. Ajuste as configurações de notificação do transporte para levar os eventos à thread principal em código VCL e FMX.

Especificações, compiladores e destinos

Protocolos publicados, e o mesmo código-fonte em todos os compiladores compatíveis.

ÁreaDetalhe
MQTTOASIS MQTT 3.1.1 e MQTT 5.0.
AMQP 0.9.1A especificação AMQP 0-9-1: canais, exchanges, filas, vínculos e a classe basic.
AMQP 1.0OASIS AMQP 1.0, também publicada como ISO/IEC 19464.
KafkaO protocolo de rede do Apache Kafka sobre TCP, incluindo o formato de lote de registros v2.
STOMPSTOMP 1.0, 1.1 e 1.2.
WebSocketNão incluído. Um transporte WebSocket exige o sgcWebSockets, que fornece o cliente WebSocket.
TLSTLS 1.2 e TLS 1.3 por OpenSSL, ou o SChannel do Windows.
CompiladoresDelphi e C++ Builder 7 até 13.
PlataformasWin32, Win64, Linux64, macOS, iOS e Android.
LicenciamentoAutônomo. O runtime sgcWebSockets Core vem embutido e o código-fonte completo está incluído.
Melhor custo-benefício: All-AccessTodos os produtos da eSeGeCe, com Suporte Premium incluído, a partir de €1,059/ano.
Ver preços do All-Access

Construa com o sgcMQ

Baixe a avaliação gratuita e conecte-se ao seu broker a partir do Delphi ou do C++ Builder.