Patrón de enrutamiento de RabbitMQ en Golang
El patrón de enrutamiento en RabbitMQ extiende el método de enrutamiento de intercambio sobre la base del patrón de publicación-suscripción. El tipo de intercambio para el patrón de enrutamiento es directo, que también es el intercambio predeterminado para RabbitMQ. En las secciones anteriores, no se utilizó un intercambio explícito, pero el intercambio subyacente utilizado era en realidad un intercambio directo.
Consejo: Si no está familiarizado con las reglas del patrón de enrutamiento, por favor lea Patrones de enrutamiento de RabbitMQ.
1. Tutorial Prerrequisito
Por favor, lea primero el capítulo sobre Patrón de publicación-suscripción de RabbitMQ en Golang. Básicamente, los diversos modos de trabajo de RabbitMQ se implementan mediante varios tipos de intercambios. El código es casi el mismo, siendo la principal diferencia la definición del intercambio. Por lo tanto, una vez entendido el patrón de publicación-suscripción, otros patrones son bastante simples.
2. Declaración de un intercambio directo
err = ch.ExchangeDeclare(
"tizi365_direct", // Nombre del intercambio, debe ser único
"direct", // Tipo de intercambio
true, // Duradero
false, // Auto-eliminado
false, // Interno
false, // Sin espera
nil, // Argumentos
)
3. Envío de mensajes
// Contenido del mensaje
body := "¡Hola Tizi365.com!"
// Enviar el mensaje
err = ch.Publish(
"tizi365_direct", // Intercambio (nombre del intercambio)
"blog", // Clave de enrutamiento, un parámetro crucial que determina a qué cola se enviará su mensaje
false, // Obligatorio
false, // Inmediato
amqp.Publishing {
ContentType: "text/plain", // Tipo de contenido del mensaje, en este caso, texto sin formato
Body: []byte(body), // Contenido del mensaje
})
4. Recepción de mensajes por el consumidor
4.1. Vinculación del intercambio
// Declarar la cola en la que se operará
q, err := ch.QueueDeclare(
"", // Nombre de la cola, si no se especifica, se generará uno aleatorio
false, // Cola duradera
false, // Eliminar cuando no se use
true, // Exclusiva
false, // Sin espera
nil, // Argumentos
)
// Vincular la cola al intercambio especificado
err = ch.QueueBind(
q.Name, // Nombre de la cola
"blog", // Clave de enrutamiento, si coincide con el parámetro de enrutamiento especificado al enviar un mensaje, el mensaje se entrega a la cola actual
"tizi365_direct", // Nombre del intercambio, que debe ser consistente con el intercambio definido en el extremo del emisor del mensaje
false,
nil)
4.2. Consumir mensajes
// Crear un consumidor
msgs, err := ch.Consume(
q.Name, // Referencia al nombre de cola anterior
"", // Nombre del consumidor, si no se completa, se generará uno aleatorio
true, // Reconocer automáticamente los mensajes procesados por la cola
false, // Exclusivo
false, // No local
false, // Sin espera
nil, // Argumentos
)
// Recorrer para consumir mensajes en la cola
for d := range msgs {
log.Printf("Mensaje recibido=%s", d.Body)
}