【发布时间】:2017-07-28 05:08:32
【问题描述】:
我正在尝试使用 Spring Cloud Stream 发布和使用 Kafka 消息。我一直在处理文档here on Accessing Bound Channels。我正在尝试在频道上为我的主题使用自定义名称,所以当我尝试注入它时我有一个 @Qualifier ,但是 spring 找不到相关的 bean。它说“对于每个绑定的接口,Spring Cloud Stream 将生成一个实现该接口的 bean”,但自动装配不起作用。
我得到的错误是“com 中构造函数的参数 0...MessagingManager 需要一个无法找到的 'org.springframework.messaging.MessageChannel' 类型的 bean。”
我尝试在示例中的 MessagingManager 构造函数之前使用 @Autowired,但随后在 bean factory 中出现类似错误,即其中有 2 个,因此我将其取出,并得到了当前错误。
我尝试使用处理器可能很复杂。
这是我的组件。我正在用 spring boot 运行它并尝试用它来测试它:
@Component
public class StartupTester implements ApplicationListener<ContextRefreshedEvent> {
MessagingManager messagingManager;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
messagingManager.sendThingCreatedMessage(new ThingCreated("12345", "667788"));
}
}
@Component
public class MessagingManager {
private MessageChannel thingCreatedChannel;
public MessagingManager(@Qualifier(ThingChannelProcessor.THING_CREATED) MessageChannel output) {
thingCreatedChannel = output;
}
public void sendThingCreatedMessage(ThingCreated thingCreated) {
thingCreatedChannel.send(MessageBuilder.withPayload(thingCreated).build());
}
}
@Component
public interface ThingsChannelProcessor extends Processor {
String THING_REQUEST = "thing-request";
String THING_CREATED = "thing-created";
@Input(THING_REQUEST )
SubscribableChannel thingsRequest();
@Output(THING_CREATED )
MessageChannel thingCreated();
}
我的主类上也有@EnableBinding(ThingsMessagingManager.class),它用@SpringBootApplication 注释。
【问题讨论】:
-
尝试将接口作为参数传递@EnableBinding(ThingsChannelProcessor.class)
标签: spring-boot apache-kafka spring-cloud-stream