Catalog · How the catalog works
BrokerX
Biblioteca para comunicação simplificada com o RabbitMQ
- ★ 1 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
BrokerX
BrokerX é uma biblioteca que simplifica a comunicação com o RabbitMQ, permitindo a gestão de Queues e Exchanges, além de possibilitar o consumo e envio de mensagens de forma assíncrona, tudo em uma única solução.
⚙️ Instalação
Instalação utilizando o gerenciador de dependências boss:
boss install https://github.com/gabrielcsr/brokerx🔴 Configurações iniciais
A biblioteca utiliza o método de conexão AMQP por ser eficiente na manutenção e o STOMP por ser eficiente no consumo e envio de mensagens.
Habilitar o plugin STOMP
O RabbitMQ necessita do plugin STOMP para comunicação com a biblioteca BrokerX. Para habilitar esse plugin, execute o seguinte comando no terminal:
rabbitmq-plugins enable rabbitmq_stompCriar o arquivo de configuração
Você precisará criar o arquivo configMQ.properties no diretório onde o executável da sua aplicação está localizado. Este arquivo deve conter a seguinte estrutura:
[AMQP]
HOST=localhost
PORT=5672
USER=guest
PASSWORD=guest
[STOMP]
HOST=localhost
PORT=61613
USER=guest
PASSWORD=guestSubstitua as informações de conexão conforme os dados do seu RabbitMQ. Caso o arquivo não exista, ele será criado automaticamente ao chamar a biblioteca, e o conteúdo do arquivo será preenchido com as informações de conexão padrão, conforme descrito anteriormente.
📦 Exemplos de uso
uses
BrokerX.RabbitMQ.Classes;
var
RabbitMQ := TRabbitMQ.New;Declaração
Queue
RabbitMQ.Queue('NomeDaFila').Declare;Exchange
RabbitMQ.Exchange('NomeDaExchange').Declare;Deleção
Parametros para deleção:
const
SE_NAO_UTILIZADA = True;
SE_VAZIA = False;Queue
RabbitMQ.Queue('NomeDaQueue').Delete(SE_NAO_UTILIZADA, SE_VAZIA);Exchange
RabbitMQ.Exchange('NomeDaExchange').Delete(SE_NAO_UTILIZADA, SE_VAZIA);Bind/UnBind
Queue
RabbitMQ.Queue('NomeDaQueue').Bind('NomeExchange', 'RoutingKey');
RabbitMQ.Queue('NomeDaQueue').UnBind('NomeExchange', 'RoutingKey');Exchange
RabbitMQ.Exchange('NomeDaExchange').Bind('NomeQueue', 'RoutingKey');
RabbitMQ.Exchange('NomeDaExchange').UnBind('NomeQueue', 'RoutingKey');Consumo de mensagens da Queue
Observação: A biblioteca permite consumir diversas filas simultaneamente.
- declaração do método que será notificado ao receber uma mensagem da fila:
procedure RecebeMensagem(APayload: String; AHeaders: TDictionary<String, String> = nil);- Iniciar o consumo da fila em segundo plano:
RabbitMQ
.Queue('NomeDaFila')
.Subscribe({Ack automatico =} True)
.Consumer
.OnReceiveMessage(RecebeMensagem)
.Start;- Parar o consumo da fila:
RabbitMQ.Queue('NomeDaFila').UnSubscribe;Envio de mensagens
Observação: O envio de mensagens, assim como o consumo, ocorre em segundo plano. Portanto, basta iniciar o produtor e enviar mensagens a ele sempre que desejar.
- Iniciar o produtor de mensagens:
{Direto para Fila}
RabbitMQ
.Queue('NomeDaQueue')
.Producer
.Start;
//ou
{Para uma Rota especifica}
RabbitMQ
.Exchange('NomeDaExchange')
.Producer('RoutingKey')
.Start;- Enviar mensagens ao produtor quando necessário:
RabbitMQ
.Queue('NomeDaQueue')
.Producer
.SendMesssage('Mensagem', {Headers: Dictionary<String, String>});
//ou
RabbitMQ
.Exchange('NomeDaExchange')
.Producer('RoutingKey')
.SendMesssage('Mensagem', {Headers: Dictionary<String, String>});- Interromper o produtor:
RabbitMQ
.Queue('NomeDaQueue')
.Producer
.Stop;
//ou
RabbitMQ
.Exchange('NomeDaExchange')
.Producer('RoutingKey')
.Stop;⚠️ Considerações
O projeto utiliza as bibliotecas:
- https://github.com/brendenwalker/delphi_amqp -- Conexão AMQP
- https://github.com/danieleteti/delphistompclient -- Conexão STOMP

