我遇到了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活页夹还没有设法绑定频道或什么?如果是这样,那么替代方法是什么。
提前致谢。
答案 0 :(得分:3)
你不能从@PostConstruct
那样做。太早了。其他组件可能尚未初始化。
您必须将发送逻辑移至SmartLifecycle.start()
实施。