2017-05-30 8 views
2

ちょっと速い。反応的な@StreamListener

反応する@StreamListener入力をSpring Cloud Streamで使用することは可能ですか?私はそれによって意味することは、このようなものである。このような

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

またはプロセッサの:ドキュメントで

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

私はこのような例を見て

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

私は実行最初のスニペットのコードはDispatcher has no subscribers例外です。

答えて

3

最初の2つは同等です。エラーが発生した場合は、GitHubの問題を開いてください。

EDIT:

2つの注釈は同等ですが、入力されたフラックスのサブスクリプションがある場合、リスナーは入力のみに加入します。完全に同等であるためには、反応1は次のようになります。単純に、フラックスにlog()を呼び出す

@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); 
} 

は、独自のサブスクリプションなしで別のFluxを作成します。

+0

最初の2つが同等であれば、ちょうどうまく動作するので、2番目のスニペットを使用します。ありがとう! – wookie

+0

最初の例ではサブスクリプションが行われない理由の詳細を追加して、私の答えを編集しました。 –

+0

これは完璧です、もう一度ありがとうございます。 – wookie

関連する問題