Вам необходимо подписаться на все очереди, в которые были направлены сообщения, и использовать их с помощью ack.
Например, если вы публикуете в обмене темами с "test" в качестве ключа маршрутизации, и там3 постоянные очереди, которые подписываются на «тест», вам нужно будет использовать эти три очереди.Возможно, было бы лучше добавить еще одну очередь, которую также будут слушать ваши потребительские процессы, и попросить их игнорировать эти сообщения.
Альтернативой, поскольку вы используете RabbitMQ, является написание пользовательского плагина обмена, который будет приниматьнекоторые внеплановые инструкции для очистки всех очередей.Например, этот обмен может прочитать специальный заголовок сообщения, который говорит ему очистить все очереди, которым предназначено это сообщение.Это требует написания кода Erlang, но реализовано 4 различных типа обмена, поэтому вам нужно будет только скопировать наиболее похожий и написать код для новых действий.Если вы используете для этого только пользовательские заголовки, то тело сообщения может быть обычным сообщением для потребителей.
Подводя итог:
1) издатель должен сам принимать сообщения.2) издатель может отправить специальное сообщение в специальной очереди, чтобы сказать потребителям игнорировать сообщение. 3) издатель может отправить специальное сообщение на пользовательский обмен, который удалит все существующие сообщения из очередей перед отправкой этого специального сообщения потребителям.