Debe suscribirse a todas las colas a las que se enrutaron los mensajes y consumirlos con ack.
Por ejemplo, si publica en un intercambio de temas con "prueba" como la clave de enrutamiento, y hay 3 colas persistentes que se suscriben a "prueba" necesitaría consumir esas tres colas. Sería mejor agregar otra cola que sus procesos de consumidor también escucharían y decirles que ignoren esos mensajes.
Una alternativa, ya que está utilizando RabbitMQ, es escribir un plugin de intercambio personalizado que aceptará algunas instrucciones fuera de banda para borrar todas las colas. Por ejemplo, puede hacer que ese intercambio lea un encabezado de mensaje especial que le indique que borre todas las colas a las que está destinado este mensaje. Esto requiere escribir el código Erlang, pero hay 4 tipos diferentes de intercambio implementados, por lo que solo necesitarás copiar el más similar y escribir el código para los nuevos bahaviours. Si solo usa encabezados personalizados para esto, entonces el cuerpo del mensaje puede ser un mensaje normal para los consumidores.
Para resumir:
1) el editor tiene que consumir los mensajes en sí 2) el editor puede enviar un mensaje especial en una cola especial para informar a los consumidores para ignorar el mensaje 3) el editor puede enviar un mensaje especial para un intercambio personalizado que borrará todos los mensajes existentes de las colas antes de enviar este mensaje especial a los consumidores.
No, esto resuelve un problema diferente. No es necesario que rechace un mensaje del lado del consumidor, quiero cancelar su entrega del lado del productor, para que el mensaje no llegue a un consumidor como si nunca hubiera existido. En mi problema, un consumidor no puede decidir si un mensaje debe ser rechazado. – jkff
Si los mensajes se publicaron correctamente y necesita eliminarlos de la cola conocida, suscríbase y cómprelos en el productor. –