@PostConstruct并自动连接MessageChannel

时间:2017-05-30 17:23:07

标签: spring-boot apache-kafka spring-cloud-stream

我遇到了Spring Cloud Stream的问题。问题是我有一个bean,它会在创建后立即写入Kafka(使用@PostConstruct注释的方法),因此我自动装配相应的MessageChannel并在application.yml中设置destination和binder属性。它是这样的:

@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活页夹还没有设法绑定频道或什么?如果是这样,那么替代方法是什么。

提前致谢。

1 个答案:

答案 0 :(得分:3)

你不能从@PostConstruct那样做。太早了。其他组件可能尚未初始化。

您必须将发送逻辑移至SmartLifecycle.start()实施。