Spring cloud stream SpringCloudStream 1.2.2聚合应用程序生成器

Spring cloud stream SpringCloudStream 1.2.2聚合应用程序生成器,spring-cloud-stream,Spring Cloud Stream,我刚开始使用cloud stream,在过去的两天里,我似乎一直被这个问题困扰着。尝试了不同版本的stackoverflow,但我无法让它正常工作 这是我的配置 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.R

我刚开始使用cloud stream,在过去的两天里,我似乎一直被这个问题困扰着。尝试了不同版本的stackoverflow,但我无法让它正常工作

这是我的配置

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.4.RELEASE</version>
</parent>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>           
    </dependencies>
</dependencyManagement>
我的所有处理器都采用以下格式

@SpringBootApplication
@EnableBinding(Processor.class)
public class ProcessorApplicationXXX {

@Transformer(inputChannel = "input", outputChannel = "output")
public String transform(String payload) {

}
}
这是我的SourceApplication

@SpringBootApplication
@EnableBinding(Source.class)
public class JSONFileSourceApplication {

@Bean
@InboundChannelAdapter(Source.OUTPUT)
public String greet() throws IOException {
    File file = new File("input_event.json");
    FileInputStream fis = new FileInputStream(file);
    final String jsonRequest = IOUtils.toString(fis);
    return jsonRequest;
}
}

若我在源方法上注释@Bean,它会抛出下面的异常。参考文档中的示例用@Bean注释。不知道我错过了什么

Caused by: java.lang.IllegalArgumentException: The 'interface org.springframework.integration.annotation.InboundChannelAdapter' on @Bean method level is allowed only for: org.springframework.integration.core.MessageSourcebeans: java.lang.String
at org.springframework.util.Assert.instanceCheckFailed(Assert.java:389)
at org.springframework.util.Assert.isInstanceOf(Assert.java:327)
at org.springframework.integration.config.annotation.InboundChannelAdapterAnnotationPostProcessor.createMessageSource(InboundChannelAdapterAnnotationPostProcessor.java:85)
at org.springframework.integration.config.annotation.InboundChannelAdapterAnnotationPostProcessor.postProcess(InboundChannelAdapterAnnotationPostProcessor.java:63)
at org.springframework.integration.config.annotation.MessagingAnnotationPostProcessor$1.doWith(MessagingAnnotationPostProcessor.java:189)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:530)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:537)
at org.springframework.integration.config.annotation.MessagingAnnotationPostProcessor.postProcessAfterInitialization(MessagingAnnotationPostProcessor.java:155)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:423)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1633)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
... 17 common frames omitted
如果我去掉@Bean,它会抛出下面的异常

2017-06-09 19:47:24 [main] ERROR o.s.boot.SpringApplication - 
Application startup failed
org.springframework.context.ApplicationContextException: Failed to start bean 'outputBindingLifecycle'; nested exception is java.lang.IllegalStateException: A default binder has been requested, but there there is no binder available
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:176)
at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51)
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346)
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149)
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:879)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:545)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134)
at org.springframework.cloud.stream.aggregate.AggregateApplicationUtils.createParentContext(AggregateApplicationUtils.java:52)
at org.springframework.cloud.stream.aggregate.AggregateApplicationBuilder.run(AggregateApplicationBuilder.java:207)
at org.springframework.cloud.stream.aggregate.AggregateApplicationBuilder$AppConfigurer.run(AggregateApplicationBuilder.java:412)
at com.xdmodules.aggregate.SampleAggregateApplication.main(SampleAggregateApplication.java:30)
Caused by: java.lang.IllegalStateException: A default binder has been requested, but there there is no binder available
at org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinder(DefaultBinderFactory.java:95)
at org.springframework.cloud.stream.binding.BindingService.getBinder(BindingService.java:155)
at org.springframework.cloud.stream.binding.BindingService.bindProducer(BindingService.java:111)
at org.springframework.cloud.stream.binding.BindableProxyFactory.bindOutputs(BindableProxyFactory.java:238)
at org.springframework.cloud.stream.binding.OutputBindingLifecycle.start(OutputBindingLifecycle.java:57)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173)
... 16 common frames omitted
请帮我做这个

更新:
我剥离了所有业务逻辑/依赖项,创建了一个简单的应用程序。我不再看到错误。如果有Source->Processor->Sink,则应用程序工作正常。但是,如果有多个处理器,则输出不符合预期。可能是我的频道配置错误或与此问题有关-

这是我的示例代码的链接。
方法上不应出现
@Bean
注释,除非返回类型是
MessageSource
-这是文档中的错误-请参阅

目前还不清楚为什么会失败,并且示例的某些部分(例如,接收器)缺失——您是否可以在GitHub中包含一个完整的示例

您也可以看看这个工作示例:


一般来说,拥有完整的项目应该有助于诊断问题。

方法上不应出现
@Bean
注释,除非返回类型是
MessageSource
-这是文档中的错误-请参阅

目前还不清楚为什么会失败,并且示例的某些部分(例如,接收器)缺失——您是否可以在GitHub中包含一个完整的示例

您也可以看看这个工作示例:


一般来说,拥有完整的项目应该有助于诊断问题。

我不再看到错误。如果有Source->Processor->Sink,则应用程序工作正常。但是,如果有多个处理器,则输出不符合预期。可能是我的频道配置错误,或者与此问题有关-以下是指向我的示例代码的链接。如果您使用的是
@SpringBootApplication
,则必须在单独的包中配置每个处理器/应用程序,否则类路径扫描将导致它们发生干扰。我不再看到错误了。如果有Source->Processor->Sink,则应用程序工作正常。但是,如果有多个处理器,则输出不符合预期。可能是我的频道配置错误,或者与此问题有关-以下是指向我的示例代码的链接。如果您使用的是
@SpringBootApplication
,则必须在单独的包中配置每个处理器/应用程序,否则类路径扫描将导致它们发生干扰。请参阅中的注释
2017-06-09 19:47:24 [main] ERROR o.s.boot.SpringApplication - 
Application startup failed
org.springframework.context.ApplicationContextException: Failed to start bean 'outputBindingLifecycle'; nested exception is java.lang.IllegalStateException: A default binder has been requested, but there there is no binder available
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:176)
at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51)
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346)
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149)
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:879)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:545)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134)
at org.springframework.cloud.stream.aggregate.AggregateApplicationUtils.createParentContext(AggregateApplicationUtils.java:52)
at org.springframework.cloud.stream.aggregate.AggregateApplicationBuilder.run(AggregateApplicationBuilder.java:207)
at org.springframework.cloud.stream.aggregate.AggregateApplicationBuilder$AppConfigurer.run(AggregateApplicationBuilder.java:412)
at com.xdmodules.aggregate.SampleAggregateApplication.main(SampleAggregateApplication.java:30)
Caused by: java.lang.IllegalStateException: A default binder has been requested, but there there is no binder available
at org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinder(DefaultBinderFactory.java:95)
at org.springframework.cloud.stream.binding.BindingService.getBinder(BindingService.java:155)
at org.springframework.cloud.stream.binding.BindingService.bindProducer(BindingService.java:111)
at org.springframework.cloud.stream.binding.BindableProxyFactory.bindOutputs(BindableProxyFactory.java:238)
at org.springframework.cloud.stream.binding.OutputBindingLifecycle.start(OutputBindingLifecycle.java:57)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173)
... 16 common frames omitted