Аннотация слушателя Rabbit получает имя очереди из yaml

В настоящее время у меня есть аннотация слушателя кролика, установленная как:

@RabbitListener (очереди = "моя очередь")

Нельзя ли вытащить имя очереди из моего файла yaml. Причина, по которой я хочу это сделать, заключается в том, что я могу изменить свою очередь на тестовую очередь для моего интеграционного теста, просто изменив имя очереди в файле yaml. Похоже, что аннотация должна принимать постоянную строку, есть ли способ обойти это? Спасибо,


person helpme7766    schedule 08.09.2017    source источник


Ответы (1)


Да, это называется properties place holder и делается так:

@RabbitListener(queues = "${myQueue.property}")

Где этот myQueue.property точно объявлен в вашем yaml.

https://docs.spring.io/spring-amqp/docs/1.7.3.RELEASE/reference/html/_reference.html#async-annotation-driven

Имя, значение и тип аргумента могут быть заполнителями свойств (${...}) или выражениями SpEL (#{...}). Имя должно разрешаться в строку; выражение для типа должно разрешаться в класс или полное имя класса. Значение должно разрешаться во что-то, что может быть преобразовано DefaultConversionService в тип (например, x-message-ttl в приведенном выше примере).

person Artem Bilan    schedule 09.09.2017
comment
что, если мне нужно настроить прослушиватель для нескольких очередей? - person Kedar9444; 22.01.2021
comment
Параметр queues является многозначным, так что вы просто можете сделать это queues = {"queue1", "queue2"} - person Artem Bilan; 22.01.2021
comment
Это не то, что я хочу, я должен иметь возможность настраивать несколько очередей без изменения кода. - person Kedar9444; 22.01.2021
comment
Ну, это не ясно из вашего простого комментария. Итак, вам нужно указать эти очереди в файле свойств вашего приложения и использовать тот же механизм заполнителей свойств, но заключенный в это выражение SpEL: "#{'${myQueue.property}'.split(',')} - person Artem Bilan; 22.01.2021
comment
Хорошо, позвольте мне попробовать это, спасибо - person Kedar9444; 22.01.2021