Blog do Aguiar

Comparando Oracle Advanced Queuing e Apache Kafka para Processamento Assíncrono

Introdução

Tanto o Oracle Advanced Queuing (AQ) quanto o Apache Kafka são soluções robustas para processamento assíncrono de mensagens, mas cada uma possui suas características e casos de uso específicos. Este artigo compara as duas tecnologias e explora como utilizar o Oracle AQ como uma alternativa ao Kafka para processamento assíncrono.

Oracle Advanced Queuing (AQ)

Visão Geral

Oracle Advanced Queuing (AQ) é uma solução de enfileiramento nativa do Oracle Database, projetada para gerenciar mensagens e processos assíncronos. AQ é totalmente integrado ao Oracle Database, utilizando suas capacidades de transação, segurança e persistência.

Características Principais

Apache Kafka

Visão Geral

Apache Kafka é uma plataforma de streaming distribuída desenvolvida para processar grandes volumes de dados em tempo real. É amplamente utilizada para construir pipelines de dados e aplicativos de streaming.

Características Principais

Comparação Entre Oracle AQ e Apache Kafka

Persistência e Durabilidade
Escalabilidade
Flexibilidade e Uso
Modelos de Enfileiramento

Utilizando Oracle AQ para Processamento Assíncrono

Se você optar por utilizar o Oracle Advanced Queuing em vez do Kafka para processamento assíncrono, aqui estão os passos básicos para implementar essa solução:

1. Configuração de Filas

Crie as filas necessárias no Oracle Database.


BEGIN
  DBMS_AQADM.CREATE_QUEUE_TABLE(
    queue_table => 'my_queue_table',
    queue_payload_type => 'RAW'
  );

  DBMS_AQADM.CREATE_QUEUE(
    queue_name => 'my_queue',
    queue_table => 'my_queue_table'
  );

  DBMS_AQADM.START_QUEUE(
    queue_name => 'my_queue'
  );
END;

2. Enfileiramento de Mensagens

Enfileire mensagens na fila criada.


DECLARE
  enqueue_options DBMS_AQ.ENQUEUE_OPTIONS_T;
  message_properties DBMS_AQ.MESSAGE_PROPERTIES_T;
  message_id RAW(16);
  message RAW(100);
BEGIN
  message := UTL_RAW.CAST_TO_RAW('Minha mensagem');
  DBMS_AQ.ENQUEUE(
    queue_name => 'my_queue',
    enqueue_options => enqueue_options,
    message_properties => message_properties,
    payload => message,
    msgid => message_id
  );
  COMMIT;
END;
3. Desenfileiramento de Mensagens

Desenfileire mensagens da fila.

DECLARE
  dequeue_options DBMS_AQ.DEQUEUE_OPTIONS_T;
  message_properties DBMS_AQ.MESSAGE_PROPERTIES_T;
  message_id RAW(16);
  message RAW(100);
BEGIN
  DBMS_AQ.DEQUEUE(
    queue_name => 'my_queue',
    dequeue_options => dequeue_options,
    message_properties => message_properties,
    payload => message,
    msgid => message_id
  );
  DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_TO_VARCHAR2(message));
  COMMIT;
END;
4. Notificações e Eventos

Configure notificações para que as aplicações sejam alertadas automaticamente sobre novas mensagens.


CREATE OR REPLACE TRIGGER notify_new_message
AFTER INSERT ON my_queue_table
FOR EACH ROW
BEGIN
  DBMS_ALERT.SIGNAL('new_message', 'New message enqueued');
END;

Conclusão

Tanto o Oracle Advanced Queuing quanto o Apache Kafka são soluções robustas para processamento assíncrono, cada uma com suas vantagens específicas. Oracle AQ é ideal para aplicações que já utilizam o Oracle Database e precisam de transações complexas e integração direta com sistemas Oracle. Apache Kafka, por outro lado, oferece alta escalabilidade, desempenho em tempo real e flexibilidade para uma ampla variedade de casos de uso. A escolha entre as duas soluções deve considerar os requisitos específicos da sua aplicação e infraestrutura existente.

Share this content:

Sair da versão mobile