我正在尝试使用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工厂中有一个类似的错误,其中有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注释。
答案 0 :(得分:3)
我无法重现您的错误。但我有几点可以遵循:
@Component
@EnableBinding
上应该有@EnableBinding(ThingsChannelProcessor.class)
而不是ThingsMessagingManager Barista
示例实际上,让我在4
上更清楚一点。我们创建一个子上下文,因此为了确保您的上下文已完全初始化,请确保您还在Starter上实现ApplicationContextAware,并在发送消息之前检查上下文是否相同否则您将收到错误{{1 }}