1

我正在使用Spring Webflux,Spring Data和Project Reactor進行非阻塞I/O(Spring Boot 2.0.0.M7)。有限源上的反應流保持未來事件打開

我的目標是創建一個類似股票代碼的API,以允許客戶端根據某些條件從端點請求所有資源,並接收在初始請求之後創建的新資源。 Reactive MongoDB是後備存儲。基本的HandlerFunction實現如下所示。

Mono<ServerResponse> getFoos(ServerRequest request) { 
    ok().contentType(TEXT_EVENT_STREAM) 
      .body(fooRepository.findAll(), Foo) 
} 

顯然,這只是返回所有Foos當前可用,那麼Publisher關閉連接,並沒有新的Foos被髮送到客戶端。我的問題是用什麼樣的模式來添加一個無限的流到這個可以接受新條目?

  1. 的毗連與一些全球Publisher Bean我寫新Foos爲他們創造
  2. 添加onComplete其重新訂閱到Repository(有一些標準來篩選重複的條目)
  3. 使用repeat,讓客戶端過濾副本
  4. 還有其他?

回答

1

如果相應地配置您的MongoDB集合(它必須爲上限),你可以使用tailable光標達到你想要什麼,只需添加上你的儲存庫@Tailable註解。請參閱Spring Data MongoDB reference documentation about infinite streams

+0

只是後續問題。這是否意味着,我們需要創建一個單獨的集合(封頂)以使其工作? – pvpkiran

+0

集合的確需要加蓋。這是MongoDB具備此功能的條件。 –

+0

謝謝。對於MongoDB也是新手,我沒有閱讀文檔中的Mongo特定部分。 – JudgingNotJudging

相關問題