如何使用反应式编程从房间发布消息?

时间:2019-03-24 20:34:33

标签: reactive-programming spring-webflux spring-data-r2dbc

我处理反应式编程的话题。 我使用WebFlux和R2dbc访问数据库。 我正在为聊天应用程序开发一个小型后端。 因此,我对此主题有一些疑问,对于建议和改进我将非常高兴。

这是服务等级

@Service
public class MessageService implements IMessageService {

    UnicastProcessor<Message> hotProcessor = UnicastProcessor.create();
    private final FluxSink<Message> fluxSink = hotProcessor.sink(FluxSink.OverflowStrategy.LATEST);
    private final Flux<Message> hotFlux = hotProcessor.publish().autoConnect();



    @Autowired
    private MessageRepository messageRepository;

    public Flux<Message> findAll() {
        return this.messageRepository.findAll();
    }


    public Mono<Message> create(Message nachricht) {
        this.fluxSink.next(nachricht);
        return this.messageRepository.save(nachricht);
    }

    // how can I persist messages and to arrange a chat room.
    public Flux<Message> finAllMessagesByChatroomId(Long id) {
        return hotFlux.filter(m->m.getId().intValue() == id.intValue());        
    }
}

何时应该在DirectProcessor上使用UnicastProcessor。

更新
稍作修正

public Flux<Message> finAllMessagesByChatroomId(Long id) {
        return hotFlux.filter(m->m.getRoom_id == id);        
}

但是如何从数据库中获取所有消息并将其添加到fluxSink?

0 个答案:

没有答案