Spring RabbitTemplate не создает очередь недоставленных сообщений с TTL

Я использую spring-rabbit1.1 и RabbitMQ 3.3.1,

Моя весенняя конфигурация создаст любую очередь с помощью RabbitTemplate на Rabbit MQ, но если очередь была настроена с x-dead-letter-exchange и x-message-ttl, она просто создает очередь без TTL и обмена мертвыми буквами. .

Например: приведенная ниже очередь создаст очередь, но TTL и обмен недоставленными буквами не создается.

<rabbit:queue name="hello.queue.dead">
    <rabbit:queue-arguments>
        <entry key="x-dead-letter-exchange" value="hello.activity-task.topic"/>
        <entry key="x-message-ttl" value="10000"/>
    </rabbit:queue-arguments>
</rabbit:queue>

Поэтому мне пришлось удалить очередь из Rabbit MQ и вручную создать со всеми необходимыми значениями, чтобы она работала.

Может ли кто-нибудь мне помочь, есть ли вариант решения этой проблемы ???


person BSrinivas    schedule 21.07.2014    source источник


Ответы (1)


Вы должны явно объявить очередь и обмен ...

<rabbit:queue name="q.with.dlx">
    <rabbit:queue-arguments> 
        <entry key="x-dead-letter-exchange" value="dlx"/>
        <entry key="x-message-ttl" value="10000" value-type="java.lang.Long"/>
    </rabbit:queue-arguments>
</rabbit:queue>

<rabbit:queue name="dlq"/>

<rabbit:direct-exchange name="dlx">
    <rabbit:bindings>
        <rabbit:binding key="q.with.dlx" queue="dlq"/>
    </rabbit:bindings>
</rabbit:direct-exchange>

Предполагается, что вы направили исходное сообщение с использованием прямого обмена по умолчанию (маршрутизация по имени очереди). Следовательно, маршрутизация недоставленных сообщений использует тот же ключ маршрутизации (имя очереди). Если вы выполняете маршрутизацию с использованием явного ключа маршрутизации, вы должны использовать его.

Кстати, RabbitTemplate не объявляет эти элементы, это экземпляр RabbitAdmin.

person Gary Russell    schedule 21.07.2014
comment
Привет, Гэри, спасибо за быстрый ответ. Я хочу добавить полную конфигурацию xml, я хотел знать, как Spring может помочь мне создать очередь с TTL и DLX на кроличьем MQ. - person BSrinivas; 22.07.2014
comment
У меня уже была такая же конфигурация, как вы посоветовали, но очередь просто создается без каких-либо аргументов. - person BSrinivas; 22.07.2014
comment
Хотя я знал, что это сработает, я протестировал конфигурацию выше, прежде чем ответить. Просто работает. У вас должно быть что-то неправильно настроено. Я предлагаю вам использовать комбинацию ведения журнала DEBUG и пользовательского интерфейса управления RabbitMQ, чтобы выяснить, в чем проблема. - person Gary Russell; 22.07.2014
comment
Привет, Гэри, не могли бы вы помочь мне еще раз? Я использовал вашу конфигурацию, она создала обмен, но не очередь. Как вы думаете, что мне не хватает, какой-либо пример или ссылка, которыми вы можете поделиться, которые помогут мне получить обмен и очередь, созданные динамически из spring на rabbit mq. другой вопрос, изменит ли он очередь, добавив ttl в очередь, если он уже есть на rabbit mq. - person BSrinivas; 23.07.2014
comment
Я использовал точную конфигурацию, которую вы видите выше, вместе с bean-компонентом RabbitAdmin (и, конечно же, фабрикой соединений). Предлагаю вам включить ведение журнала DEBUG; RabbitAdmin генерирует журналы отладки при объявлении. Нет, RabbitMQ отклоняет попытки изменить аргументы очереди; очередь должна быть удалена и снова добавлена. - person Gary Russell; 23.07.2014
comment
Я пропустил конфигурацию pom для баночки с пружинным кроликом, это причина, по которой он не отображал никаких журналов в режиме отладки, теперь он работает, спасибо - person BSrinivas; 29.07.2014
comment
Кроме того, поскольку это прямой обмен, вам может потребоваться указать ключ маршрутизации мертвой буквы в q.with.dlx, добавив новую запись с ключом x-dead-letter-routing-key - person bhdrkn; 01.06.2015
comment
Здесь вы использовали xml файл. Я использую весеннюю загрузку, без файлов xml. Можно ли выполнить аналогичную конфигурацию, как в конфигурации java? Может быть, мне также стоит использовать xml для настройки очереди? - person ; 25.03.2017
comment
В справочном руководстве есть много примеров использования конфигурации Java, например здесь. - person Gary Russell; 25.03.2017