Padrão de Roteamento do RabbitMQ em Golang
O padrão de roteamento no RabbitMQ estende o método de roteamento de troca com base no padrão de publicação e assinatura. O tipo de troca para o padrão de roteamento é direto, que também é a troca padrão para o RabbitMQ. Nas seções anteriores, não foi utilizada uma troca explícita, mas a troca subjacente utilizada era na verdade uma troca direta.
Dica: Se você não está familiarizado com as regras do padrão de roteamento, por favor leia Padrões de Roteamento do RabbitMQ.
1. Tutorial Prévio
Por favor, leia o capítulo sobre Padrão de Publicação e Assinatura do RabbitMQ em Golang primeiro. Essencialmente, os vários modos de funcionamento do RabbitMQ são implementados por vários tipos de trocas. O código é quase o mesmo, sendo a principal diferença a definição da troca. Portanto, uma vez que o padrão de publicação e assinatura é compreendido, os outros padrões são bastante simples.
2. Declarando uma Troca Direta
err = ch.ExchangeDeclare(
"tizi365_direct", // Nome da troca, precisa ser único
"direct", // Tipo de troca
true, // Durável
false, // Auto-exclusão
false, // Interno
false, // Sem espera
nil, // Argumentos
)
3. Enviando Mensagens
// Conteúdo da mensagem
body := "Olá Tizi365.com!"
// Enviando a mensagem
err = ch.Publish(
"tizi365_direct", // Troca (nome da troca)
"blog", // Chave de roteamento, um parâmetro crucial que determina para qual fila sua mensagem será enviada
false, // Obrigatório
false, // Imediato
amqp.Publishing {
ContentType: "text/plain", // Tipo de conteúdo da mensagem, neste caso, texto simples
Body: []byte(body), // Conteúdo da mensagem
})
4. Consumidor Recebendo Mensagens
4.1. Vinculando a Troca
// Declarando a fila a ser operada
q, err := ch.QueueDeclare(
"", // Nome da fila, se não especificado, um será gerado aleatoriamente
false, // Fila durável
false, // Excluir quando não utilizada
true, // Exclusiva
false, // Sem espera
nil, // Argumentos
)
// Vinculando a fila à troca especificada
err = ch.QueueBind(
q.Name, // Nome da fila
"blog", // Chave de roteamento, se corresponder ao parâmetro de roteamento especificado ao enviar uma mensagem, a mensagem é entregue à fila atual
"tizi365_direct", // Nome da troca, que precisa ser consistente com a troca definida no final do remetente da mensagem
false,
nil)
4.2. Consumindo Mensagens
// Criando um consumidor
msgs, err := ch.Consume(
q.Name, // Referência ao nome da fila anterior
"", // Nome do consumidor, se não preenchido, um será gerado aleatoriamente
true, // Reconhecer automaticamente as mensagens processadas pela fila
false, // Exclusivo
false, // Sem local
false, // Sem espera
nil, // Argumentos
)
// Loop para consumir mensagens na fila
for d := range msgs {
log.Printf("Mensagem recebida=%s", d.Body)
}