Reactive @StreamListener

时间:2017-05-30 21:33:17

标签: java spring-boot spring-cloud-stream

快一点。

是否可以通过Spring Cloud Stream获得响应式@StreamListener输入?我的意思是这样的:

@StreamListener
public void log(@Input(Sink.INPUT) Flux<String> strings)
{
    strings.log();
}

在文档中我只看到了这样的例子:

@StreamListener(Sink.INPUT)
public void log(String message)
{
    log.info(message);
}

或像这样的处理器:

@StreamListener
@Output(Source.OUTPUT)
public Flux<String> log(@Input(Sink.INPUT) Flux<String> strings)
{
    return strings.map(String::toUpperCase);
}

当我从第一个代码段运行代码时,我得到Dispatcher has no subscribers例外。

1 个答案:

答案 0 :(得分:3)

前两个是等价的。如果您遇到错误,请打开GitHub问题。

编辑:

两个注释是等价的,但是如果输入通量有订阅,则监听器将仅订阅输入。为了完全等效,反应性应该是:

@StreamListener
public void log(@Input(Sink.INPUT) Flux<String> strings)
{
    strings.log().subscribe();
}

@StreamListener
public void log(@Input(Sink.INPUT) Flux<String> strings)
{
    strings.subscribe(log::info);
}

只需在助焊剂上调用log()即可创建另一个Flux而无需自己订阅。