Publicar uma mensagem em uma exchange ou fila no RabbitMQ
PublishRabbitMQ da plataforma Devprime é utilizado para enviar mensagens para uma exchange no RabbitMQ. Este método permite especificar o tipo de exchange, a chave de roteamento e as propriedades da mensagem, garantindo que as mensagens sejam roteadas corretamente para as filas associadas.Parâmetros
-
alias(string, opcional): Parâmetro opcional com o nome do Stream Alias conforme definido na configuração do Stream Adapter. O valor padrão é “Stream1”. -
exchangeName(string): Nome da exchange para a qual a mensagem será publicada. -
exchangeType(ExchangeType?, opcional): Tipo da exchange. Pode ser:Direct: Roteia mensagens para filas com uma chave de roteamento exata.Fanout: Roteia mensagens para todas as filas ligadas à exchange.Topic: Roteia mensagens para filas com base em padrões de chave de roteamento.Headers: Roteia mensagens com base em cabeçalhos de mensagem.
Se não for especificado, o padrão será usado conforme a configuração da exchange.
-
routingKey(string): Chave de roteamento usada para direcionar mensagens da exchange para as filas associadas. -
eventMessage(BasicEvent): Mensagem do evento que será publicada na exchange. -
customProperties(CustomMessageProperties, opcional): Propriedades personalizadas para a mensagem, como TTL (Time-to-Live), persistência e outras características específicas.
Retorno
void: Este método não retorna um valor. Ele executa a publicação da mensagem na exchange especificada.
Aqui está um exemplos de como usar o método PublishRabbitMQ na sua aplicação:
1. Publicação direta na fila sem utilizar a Exchange
Nesse cenário não é necessário informar uma exchange
|
|
2. Publicação usando Exchange Direct sem CustomMessageProperties
Para configurar esse cenário, é necessário associar a Exchange “myExchangeName” do tipo Direct à fila “myQueueName”.
|
|
3. Publicação usando Exchange Direct usando TTL
Para configurar esse cenário, é necessário associar a Exchange “myExchangeName” do tipo Direct à fila “myQueueName”. Utilizamos CustomMessageProperties para definir os parâmetros de persistência e o tempo de expiração (TTL). O evento publicado terá um tempo determinado para expirar.
|
|
4. Publicação usando Exchange Fanout com duas filas como destino
Para configurar esse cenário, é necessário associar a Exchange “myExchangeName” do tipo Fanout às filas “myQueueName1” e “myQueueName2”. Neste caso, não é necessário especificar o nome da fila no Publish. A Exchange distribuirá o evento automaticamente para ambas as filas.
|
|
5. Publicação usando Exchange Topic com duas filas como destino
Para configurar esse cenário, é necessário associar a Exchange “myExchangeName” do tipo Topic a duas filas:
- Bind para a fila “myQueueName1” com a Routing Key:
"quick.ecommerce.#" - Bind para a fila “myQueueName2” com a Routing Key:
"#.logs"
Neste exemplo, faremos três publicações, variando a routingKey. A exchange irá distribuir as mensagens de forma que uma delas será entregue em ambas as filas, enquanto as outras serão entregues em apenas uma das filas.
|
|
6. Publicação usando Exchange Headers com duas filas como destino
Para configurar esse cenário, é necessário associar a Exchange “myExchangeName” do tipo Headers a duas filas. O primeiro bind será para a fila “myQueueName1” utilizando os seguintes argumentos de chave/valor:
- Arguments 1:
{ "format", "pdf" } - Arguments 2:
{ "type", "report" } - Arguments 3:
{ "x-match", "all" }
O segundo bind também será para a fila “myQueueName2”, com os seguintes argumentos:
- Arguments 1:
{ "format", "zip" } - Arguments 2:
{ "x-match", "any" }
É importante observar que a Exchange do tipo Headers não utiliza a configuração de Routing Key durante o bind.
Neste exemplo, realizaremos três publicações, variando os parâmetros de Arguments. A exchange será responsável por distribuir as mensagens, e, ao final, um dos eventos será direcionado para “myQueueName1” e os outros dois para “myQueueName2”.
|
|
Considerações
- Certifique-se de que o
exchangeNameesteja corretamente configurado e exista no RabbitMQ antes de tentar publicar a mensagem. - Ajuste o
exchangeTypee ascustomPropertiesconforme necessário para sua estratégia de publicação e roteamento de mensagens. - As implementações nativas do RabbitMQ são específicas para essa plataforma e atendem a casos de uso particulares. Caso você migre para outra plataforma de streaming, será necessário ajustar seu código para usar os métodos padrão da Devprime ou os métodos específicos da nova plataforma.