Rabbit MQ блокирует вызов, чтобы отправить сообщение и убедиться, что он дает правильный код ответа для превышенного лимита сообщений или превышения лимита размера сообщения
Привет, я ищу простое решение на кролика MQ. Ниже приведены настройки, сделанные на кролике.
- Запустите кролик-сервер
- создать обмен (myexchange) типа topic с прочной опцией.
- создайте очередь (myqueue) с длительным параметром и байтами x-max-length, установленными в 4, и длиной x-max-length, установленными в 2.
- Свяжите myexchange с myrouting в myqueue.
- Публикация сообщения с использованием basic_publish с использованием канала aqmp (channel.basicPublish(myexchange, myrouting, true, null, "test".getBytes("UTF-8"));
- Используйте параметры подтверждения издателя, такие как channel.confirmSelect(); и channel.waitForConfirmsOrDie();
Фрагмент кода ниже
channel = connectionFactory.getChannel();
channel.queueDeclarePassive("myqueue");
channel.confirmSelect();
channel.basicPublish("myexchange", "myrouting", true,
null, "test".getBytes("UTF-8"));
channel.waitForConfirmsOrDie();
Теперь кролик mq не отвечает с ошибкой из-за превышения количества сообщений / превышения размера. Я мог бы отправить 1000 сообщений / размером 1 КБ, и потребитель также потребляет все эти сообщения. Так как я могу получить код ошибки? Любая помощь по этому вопросу, пожалуйста?
1 ответ
Команда RabbitMQ отслеживает этот список рассылки и только иногда отвечает на вопросы по Stackru.
Здесь нужно рассмотреть два момента. Во-первых, ваш потребитель может потреблять сообщения достаточно быстро, чтобы предел никогда не достигался.
Во-вторых, при достижении предела длины очереди сообщения отбрасываются из начала очереди, чтобы освободить место для новых сообщений. Это означает, что вы потеряете самые старые сообщения в очереди - документы. Это поведение будет настраиваться в 3.7.0
,
Однако ни в коем случае не будет возвращена ошибка, поэтому я не знаю, почему вы думаете, что ошибка будет возвращена. В документации ясно, что происходит, когда достигается предел очереди.