我正在尝试从队列接收的传入消息中创建Flux
。
例如,如果我使用的是Amazon SQS,如何实现以下代码:
Flux<String> messages = connectionToSQS.receiveFromQueue(queueName);
messages.map(s-> log.info(“ message:{}”,s).subscribe();
经过实验,我发现了以下问题:
Flux
变冷?除非消费者要求,否则我不想从SQS请求消息。这使我可以使用背压。首先解决此问题,然后根据Reactor文档生成类似以下代码的内容:
Flux<String> bridge = Flux.create(sink -> {
myEventProcessor.register(new MyEventListener<String>() {
public void onDataChunk(List<String> chunk) {
for(String s : chunk) {
sink.next(s);
}
}
public void processComplete() {
sink.complete();
}
});
});
想法是创建一个单线程,该线程继续循环请求消息,然后使用上述观察者模式对收到的每条消息执行next()
。