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()
?
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?
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?