@PostConstruct и автоматическое подключение MessageChannel

У меня проблема с Spring Cloud Stream. Дело в том, что у меня есть bean-компонент, который будет писать в Kafka, как только он будет создан (метод, аннотированный @PostConstruct), поэтому я автоматически подключаю соответствующий MessageChannel и устанавливаю свойства назначения и связывателя в application.yml. Это выглядит так:

@Component
@RequiredArgsConstructor
public class Sender
{
    private final MessageChannel output;

    @PostConstruct
    public void start()
    {
       output.send(new GenericMessage("Hello world");  
    }
}

И application.yml

spring:
    cloud:
        stream:
            bindings:
              output:
                destination: someData
                binder: kafka

У меня также есть следующие зависимости:

- spring-cloud-stream-reactive
- reactor-core
- spring-cloud-starter-stream-kafka

Сам проект запускается, но я получаю следующее исключение при попытке записи в метод output в start():

Caused by: org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers

Это потому, что биндер Kafka еще не успел связать канал или что? Если да, то каков альтернативный способ.

Заранее спасибо.


person wookie    schedule 30.05.2017    source источник


Ответы (1)


Вы не можете сделать это из @PostConstruct. Это слишком рано. Другие компоненты могут быть еще инициализированы.

Вы должны переместить логику отправки в реализацию SmartLifecycle.start().

person Artem Bilan    schedule 30.05.2017
comment
Вот о чем я думал. Тогда попробую с SmartLifecycle.start(). Спасибо! - person wookie; 30.05.2017