Если вы действительно хотите избежать SCF, упомянутой в ответе Олега, попробуйте ниже, хакерский подход.
const val IN = "input"
const val OUT = "dummy-output"
interface Channels {
@Input(IN)
fun input(): MessageChannel
@Output(OUT)
fun output(): MessageChannel
}
@EnableBinding(Channels::class)
class MsgList {
@StreamListener
@Output(OUT)
fun receive(@Input(IN) messages: Flux<String>): Flux<Void> {
return messages
.doOnNext { if (it == "err") throw IllegalStateException("err") }
.doOnNext { println(it) }
.flatMap { Mono.empty<Void>() }
}
}
Будет создана выходная привязка, но сообщения не будут проходить.В случае RabbitMQ это означает, что появится фиктивный обмен, но очередь не будет создана.
Также ошибки будут обрабатываться, как вы ожидали.В приведенном выше примере вы можете отправить 3 сообщения: «ok», «err», «ok2», и вы увидите «ok», затем исключение, а затем «ok2» на экране.«Ok2» и любое последующее действительное сообщение будет обработано должным образом.