Amqp: De alguna manera, los indicadores "exclusivo" y "duradero" de Channel.QueueDeclare se influyen mutuamente

Creado en 3 dic. 2018  ·  5Comentarios  ·  Fuente: streadway/amqp

Aquí hay un ejemplo mínimo:

package main

import (
    "fmt"

    "github.com/streadway/amqp"
)

func main() {
    conn, _ := amqp.Dial("amqp://guest:guest@localhost/")
    defer conn.Close()
    ch, _ := conn.Channel()
    defer ch.Close()
    q1, err := ch.QueueDeclare("test_qqq", /* durable: */ true, false, /* exclusive: */ false, false, nil)
    handle(err)
    fmt.Println("%+v", q1)
    q2, err := ch.QueueDeclare("test_qqq", /* durable: */ true, false, /* exclusive: */ true, false, nil)
    handle(err)
    fmt.Println("%+v", q2)
}

func handle(err error) {
    if err != nil {
        panic(fmt.Sprintf("%v", err))
    }
}

Utilizando:

  • amqp versión v0.0.0-20181107104731-27835f1a64e9
  • RabbitMQ 3.7.3 Erlang 20.2

Como puede ver, en este ejemplo estoy intentando recrear la misma cola dos veces, primero con exclusive:true , luego con exclusive:false . Falla como se esperaba, pero produce un mensaje de error inesperado:

Exception (406) Reason: "PRECONDITION_FAILED - inequivalent arg 'durable' for queue 'test_qqq' in vhost '/': received 'false' but current is 'true'"

Pasé media hora mirando sin comprender mi declaración durable: true , pero en realidad debería estar investigando el argumento exclusive . ¿Hay alguna forma de evitar que los futuros usuarios pierdan tanto tiempo? Debería ser como args 'durable' and 'exclusive' are in conflict with each other . ¿O es un problema de RabbitMQ?

mailing list material

Comentario más útil

@SergeAx - https://github.com/rabbitmq/rabbitmq-server/issues/1887

Básicamente, la presencia de "exclusivo" niega el argumento duradero, pero lo duradero se comprueba primero. Lo estoy arreglando ahora. Gracias por el código para reproducir el problema.

Todos 5 comentarios

Consulte Equivalencia de propiedad de declaración en la guía Colas.

Consulte Equivalencia de propiedad de declaración en la guía Colas.

Entiendo que puede recibir decenas de quejas como esta cada semana, pero puedo asegurarle que he leído los documentos. El problema no es un error en sí mismo o su código, sino un mensaje de error, que es engañoso. Dice que debo establecer durable en true , lo cual ya hice. ¿O tal vez está diciendo que es una falla de RabbitMQ, no de su paquete, y debería presentar un problema en su repositorio?

Actualización: he comprobado la fuente del paquete y puedo ver que ahora es un problema en el lado de RabbitMQ, lo siento. Caso cerrado aquí.

@SergeAx - https://github.com/rabbitmq/rabbitmq-server/issues/1887

Básicamente, la presencia de "exclusivo" niega el argumento duradero, pero lo duradero se comprueba primero. Lo estoy arreglando ahora. Gracias por el código para reproducir el problema.

@SergeAx disculpas, no vi la combinación de propiedades que estabas usando. De hecho, la mayoría de estas preguntas provienen de principiantes, así que utilicé una respuesta enlatada.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

janika picture janika  ·  9Comentarios

pierrre picture pierrre  ·  22Comentarios

vibridi picture vibridi  ·  7Comentarios

kpurdon picture kpurdon  ·  22Comentarios

parthibd picture parthibd  ·  3Comentarios