快一点。
是否可以通过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
例外。
答案 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
而无需自己订阅。