Ошибка RabbitMQ, потребитель быстрого ответа не существует, если не используется answerTo

avatar
Aerith
7 апреля 2018 в 22:36
1099
0
0

Я столкнулся с ошибкой, из-за которой RabbitMQ иногда жалуется на "PRECONDITION_FAILED - потребитель быстрого ответа не существует", хотя, как вы можете видеть ниже, сообщение, которое я отправляю, не имеет быстрого ответа, ответ на null. Около 50% времени сообщение будет отправлено в обмен/очередь, как я ожидаю, а остальные 50% времени я получаю эту ошибку, которая уничтожает сообщение. Я запускаю этот код в spring boot 1.3.6 с spring amqp 1.6.0. Сервер RabbitMQ версии 3.5.5 с Erlan 18.1. Я не могу обновить версии, так как это производственный код.

Мой код очень прост. Объявляю обмен ответами/очередь для дальнейшего общения.

amqpAdmin.declareExchange(exchange);
amqpAdmin.declareQueue(queue);
amqpAdmin.declareBinding(binding);

Я отправляю свое сообщение amqp на ключ обмена/маршрутизации темы обмена, но оно так и не доходит до него из-за следующей ошибки:

Publish Message Success: [MyObject], MessageProperties [headers={__TypeId__=com.do.comp.amqp}, timestamp=null, messageId=null, userId=null, appId=null, clusterId=null, type=null, correlationId=null, replyTo=null, contentType=application/json, contentEncoding=UTF-8, contentLength=97, deliveryMode=PERSISTENT, expiration=null, priority=0, redelivered=null, receivedExchange=null, receivedRoutingKey=null, deliveryTag=0, messageCount=null]] 

AMQP Connection 10.12.36.75:5672 [ERROR] org.springframework.amqp.rabbit.connection.CachingConnectionFactory.log(CachingConnectionFactory.java:1198) - Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - fast reply consumer does not exist, class-id=60, method-id=40)<br>
http-nio-8122-exec-7 [DEBUG] org.springframework.amqp.rabbit.connection.CachingConnectionFactory.getCachedChannelProxy(CachingConnectionFactory.java:476) - Creating cached Rabbit Channel from AMQChannel(amqp://admin@10.12.36.75:5672/,3)<br>
http-nio-8122-exec-7 [DEBUG] org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1392) - Executing callback on RabbitMQ Channel: Cached Rabbit Channel: AMQChannel(amqp://admin@10.12.36.75:5672/,3), conn: Proxy@782534f9 Shared Rabbit Connection: SimpleConnection@74658797 [delegate=amqp://admin@10.12.36.75:5672/, localPort= 60282]

Затем я прослушиваю созданную мной очередь ответа, который никогда не придет:

rabbitTemplate.receive(queue);

Приведенная выше ошибка связана с очередями прямого ответа, и я не использую ее, мой заголовок сообщения для ответа равен нулю. Еще одна странность заключается в том, что мы запускаем именно этот jar-файл на трех разных серверах для тестирования и разработки, и только на одном из них, похоже, возникла проблема, но все они представляют собой одну и ту же версию всего. RabbitMQ v.3.5.5 Erland 18.1

Почему RabbitMQ выдает ошибку быстрого ответа, когда поле для ответа равно null?

Источник
Artem Bilan
10 апреля 2018 в 18:13
0

Нам нужен код для воспроизведения. На уровне RabbitTemplate amq.rabbitmq.reply-to используется только при выполнении sendAndReceive(): docs.spring.io/spring-amqp/docs/1.6.11.RELEASE/reference/html/…. Вот обсуждение с командой RabbitMQ: groups.google.com/forum/#!topic/rabbitmq-users/2hWtpypT2sk. Возможно, вам нужен свежий канал публикации. Я имею в виду, что нельзя повторно использовать один и тот же ConnectionFactory для получения и отправки.

Artem Bilan
10 апреля 2018 в 18:15
0

Вот также некоторая информация: coderhelper.com/questions/48823323/…

Ответы (0)