【问题标题】:spring-cloud-stream-binder-aws-kinesi can not use @Outputspring-cloud-stream-binder-aws-kinesi 不能使用@Output
【发布时间】:2017-12-01 05:13:57
【问题描述】:

首先我必须描述我的问题以及我做了什么。 由于aws云服务是我的选择,kinesis服务是我的首选。 因此,需要 spring-cloud-stream-binder-aws-kinesis 组件来构建我的应用程序。

这是频道界面:

public interface KinesisChannel {
  String StockTradeStream = "StockTradeStream";
  String CHANNEL_SECOND = "channel_second";


  @Input(KinesisChannel.StockTradeStream)
  SubscribableChannel in_channel_a();

  @Input(KinesisChannel.CHANNEL_SECOND)
  SubscribableChannel in_channel_second();

//    @Output(KinesisChannel.CHANNEL_SECOND)
//    MessageChannel out_channel_second();

}

这是对消息进行统计,并在将消息发送到另一个通道后返回。

@EnableRxJavaProcessor()
class App2{
    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private MessageChannel StockTradeStream;

    @Bean
    public RxJavaProcessor<Object,Object> processor(){
        return inputStream -> inputStream.map(data->{
            logger.info("Received message:"+data);
            if(data!=null){
                StockTradeStream.send(MessageBuilder.withPayload("send a StockTradeStream message!").build());
            }
            return data;
        }).buffer(5).map(data -> String.valueOf("From Output Channel Return -"+ data));
    }
}

当我启动我的应用程序时,出现异常:

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-12-01 11:31:22.288 ERROR 37048 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.context.ApplicationContextException: Failed to start bean 'outputBindingLifecycle'; nested exception is java.lang.AbstractMethodError: org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.createProducerMessageHandler(Lorg/springframework/cloud/stream/provisioning/ProducerDestination;Lorg/springframework/cloud/stream/binder/ProducerProperties;)Lorg/springframework/messaging/MessageHandler;
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:50) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:348) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:151) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:114) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:880) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144) ~[spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE]
at com.bind.ApplicationStarter.main(ApplicationStarter.java:13) [classes/:na]
Caused by: java.lang.AbstractMethodError: org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.createProducerMessageHandler(Lorg/springframework/cloud/stream/provisioning/ProducerDestination;Lorg/springframework/cloud/stream/binder/ProducerProperties;)Lorg/springframework/messaging/MessageHandler;
at org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindProducer(AbstractMessageChannelBinder.java:112) ~[spring-cloud-stream-1.2.2.RELEASE.jar:1.2.2.RELEASE]
at org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindProducer(AbstractMessageChannelBinder.java:57) ~[spring-cloud-stream-1.2.2.RELEASE.jar:1.2.2.RELEASE]
at org.springframework.cloud.stream.binder.AbstractBinder.bindProducer(AbstractBinder.java:152) ~[spring-cloud-stream-1.2.2.RELEASE.jar:1.2.2.RELEASE]
at org.springframework.cloud.stream.binding.BindingService.bindProducer(BindingService.java:124) ~[spring-cloud-stream-1.2.2.RELEASE.jar:1.2.2.RELEASE]
at org.springframework.cloud.stream.binding.BindableProxyFactory.bindOutputs(BindableProxyFactory.java:238) ~[spring-cloud-stream-1.2.2.RELEASE.jar:1.2.2.RELEASE]
at org.springframework.cloud.stream.binding.OutputBindingLifecycle.start(OutputBindingLifecycle.java:57) ~[spring-cloud-stream-1.2.2.RELEASE.jar:1.2.2.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:175) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
... 14 common frames omitted

经过几次尝试,我发现输出通道无法与@Output绑定,但是通过这种方式发送消息是可以的:

        StockTradeStream.send(MessageBuilder.withPayload("send a StockTradeStream message!").build());

如果我用rabbit / kafka替换kinesis,一切都很好,匹配的流绑定器由docker本地启动。输出通道可以与@Output一起使用

那么问题是什么,我是不是漏掉了导致这个问题的东西?

【问题讨论】:

    标签: amazon-kinesis spring-cloud-stream


    【解决方案1】:

    引起:java.lang.AbstractMethodError: org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.createProducerMessageHandler(Lorg/springframework/cloud/stream/provisioning/ProducerDestination;Lorg/springframework/cloud/stream/binder/ProducerProperties; )Lorg/springframework/messaging/MessageHandler;

    您似乎正在尝试将它与错误版本的 Spring Cloud Stream 一起使用。它需要 1.3.x。 - 见the pom

    【讨论】:

      猜你喜欢
      • 2019-04-19
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多