Amqp: Pregunta: Envío y publicación en el mismo canal

Creado en 19 may. 2017  ·  7Comentarios  ·  Fuente: streadway/amqp

Hola, tengo una pregunta con respecto a la documentación de Consume() .

Los consumidores deben recorrer el canal para asegurarse de que se reciban todas las entregas. Las entregas no recibidas bloquearán todos los métodos en la misma conexión.

Entonces, ¿no es seguro Publish() un mensaje al iterar sobre chan Delivery desde Consume() ? Una entrega no recibida podría bloquear el Publish() .

¿La única forma segura es tener una conexión separada para el editor y el consumidor?
¿Seguiría siendo inseguro usar un canal diferente por Publish() ?

mailing list material

Comentario más útil

@miguelklishin
publicar y consumir en el mismo canal no está bien, ¿qué tal publicar y consumir en diferentes canales con una sola conexión?

Todos 7 comentarios

En general el protocolo de ninguna manera te impide consumir y publicar en el mismo canal. Si sus editores se encuentran con alarmas de recursos, puede ser una buena idea usar conexiones separadas para que los consumidores puedan realizar otras operaciones (p. ej., declarar colas o vincularlas), incluso si hay una alarma activa (las alarmas no bloquean a los consumidores de ninguna manera cuando viene a las entregas).

Puede haber algo específico para este cliente que deba tenerse en cuenta al publicar y consumir en la misma conexión, pero no puedo pensar en nada de inmediato. @streadway @gerhard , ¿tienes algo que agregar?

@michaelklishin gracias por su respuesta.
¿Qué quieres decir con "alarmas de recursos"?

@fho ver documentación .

@michaelklishin gracias, no creo que la parte citada de la documentación se trate de alarmas de recursos.
La cita de nuevo:

Los consumidores deben recorrer el canal para asegurarse de que se reciban todas las entregas. Las entregas no recibidas bloquearán todos los métodos en la misma conexión.

Escenario: tengo entregas sin recibir en la cola del servidor. Estoy iterando sobre los mensajes del canal de entrega.
Si llamara a Publish() en el bucle, ¿obtendría un interbloqueo en todos los canales de la conexión debido a las entregas no recibidas?

Si no, ¿cuál es el significado de la documentación citada?

No veo cómo las entregas no consumidas pueden bloquear las publicaciones. No hay respuesta a basic.publish en el protocolo.

El comentario en cuestión se agregó en https://github.com/streadway/amqp/commit/962fd418afbeb06747a85b9048a7c70691d672ae hace 5 años. Quizás @streadway pueda recordar de qué se trataba.

@miguelklishin

Si quiero usar la conexión rabbitMQ para múltiples goruotine, ¿debo hacer cada conexión para consumir y publicar? ¿como esto?

type rabbitmq struct {
    consumeConn *amqp.Connection
    publishConn *amqp.Connection
}

o

¿Está bien hacer un canal por rutina? mediante el uso de una amqp.Connection

o

¿Hay algún método de agrupación de conexiones?

@miguelklishin
publicar y consumir en el mismo canal no está bien, ¿qué tal publicar y consumir en diferentes canales con una sola conexión?

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