Настраиваемое название темы приложения Spring Cloud Stream

Я пытаюсь найти способ настроить тему, которую будет слушать весенний облачный поток @StreamListener. Моя первая попытка заключалась в том, чтобы попытаться использовать SPeL, чтобы получить это, например.

@StreamListener("#{ systemProperties['topic.name'] }")

но выражение не заменяется, и я получаю

java.lang.IllegalArgumentException: Topic name can only have ASCII alphanumerics, '.', '_' and '-'

Есть ли способ контролировать название темы при запуске приложения, а не только во время компиляции с константой?


person user1675642    schedule 08.11.2016    source источник


Ответы (2)


BeanPostProcessor, который обрабатывает @StreamListener, не поддерживает SpEL или заполнители свойств; он может содержать только имя bean-компонента для объекта (канала сообщения), который привязан к назначению связывания.

Чего именно вы пытаетесь достичь? Между адресатом и каналом уже существует косвенное указание через application.properties/yml.

person Gary Russell    schedule 08.11.2016
comment
Я хочу иметь возможность выбирать, какую из нескольких тем будет слушать экземпляр моего приложения, когда я его запускаю. - person user1675642; 09.11.2016
comment
spring.cloud.stream.bindings.input.destination=foo,bar, а затем @StreamListener(Sink.INPUT) будут слушать темы foo и bar. - person Gary Russell; 10.11.2016
comment
Спасибо, я пропустил это в документации. Это решает мою проблему. - person user1675642; 10.11.2016

В моем случае, если место назначения содержит пробел между значениями, например destination=foo, bar, это вызывает ошибку:

Topic name can only have ASCII alphanumerics.

После того, как я удалил пробелы, у меня это сработало. Просто хотел этим поделиться.

person Howie S. Nguyen    schedule 27.05.2021