基础教程
本指南在展示如何使用驱动器和MongoDB的快速入门指南之前,提供了关于Scala驱动器和其异步API的背景信息。快速入门指南.
注意
请参阅安装指南了解如何安装驱动器的说明。
响应式流
Scala驱动器建立在MongoDB Java Reactive Streams驱动器之上。响应式流API由以下组件组成
Observable
:一个自定义的Publisher实现。Observer
:一个自定义的Subscriber实现。
Observable
是一个提供可能无界数量的序列化元素的提供者,这些元素根据其从Observer
或多个Observer
实例接收到的需求进行发布。
响应对Observable.subscribe(Observer)
的调用,Observer
类上方法的可能调用序列如下协议所定义:
onSubscribe onNext* (onError | onComplete)?
这意味着总是先发出onSubscribe()
信号,然后是可能无界的onNext()
信号,由Observer
请求。之后可能是一个onError()
信号(如果发生失败),或者在没有更多元素可用时,一个onComplete()
信号,只要没有取消Subscription
。
提示
要了解更多关于响应式流的资料,请访问响应式流文档。
观察者
Scala 驱动 API 与Java 同步驱动 API 相似,并且任何导致网络 I/O 的方法都会返回 Observable<T>
类型,其中 T
是操作响应的类型。
注意
API 返回的所有 Observable
类型都是 冷,这意味着只有在订阅后才会发生任何操作。因此,仅创建一个 Observable
不会引起任何网络 I/O。只有在调用 Subscription.request()
方法时,驱动程序才会执行操作。
在此实现中,发布者都是 单播。每个对 Observable
的 Subscription
都与单个 MongoDB 操作相关联,并且 Observable
实例的 Observer
会接收到它自己特定的结果集。
背压
默认情况下,Observer
特性会在 Observable
订阅后立即请求所有结果。请确保 Observer
可以处理 Observable
的所有结果。自定义 Observer.onSubscribe()
方法的实现可以保存 Subscription
,以便仅在 Observer
有容量时请求数据。
在快速入门中使用的辅助工具
在快速入门中,我们实现了在驱动程序源 GitHub 仓库中的 Helpers.scala 文件中定义的自定义隐式辅助工具。这些辅助工具检索并打印结果。虽然快速入门是一个用于异步代码的人工场景,但示例块在一个示例的结果上阻塞,然后再开始下一个,以确保数据库的状态。《code class="leafygreen-ui-1l06pbn">辅助 对象提供了以下方法
results()
:阻塞直到Observable
完成,并返回收集到的结果headResult()
:阻塞直到可以返回Observable
的第一个结果printResults()
:阻塞直到Observable
完成,并打印出每个结果printHeadResult()
:阻塞直到Observable
的第一个结果可用,然后打印它