我在一个环境中使用Akka流,其中单个源的接收器将来来去去。出于这个原因,我从源创建发布者并在需要时附加订阅者:
val publisher= mySource.runWith(Sink.publisher(true))
与
publisher.subscribe(subscriber1)// There will be others
有些订阅者会比其他订阅者更快,我希望允许更快的订阅者独立于最慢的订阅者,至少达到发布者的输入缓冲区允许的范围。此缓冲区由 Sink.publisher(true)方法的注释描述:
如果
fanout
为true
,则具体化的Publisher
将支持多个Subscriber
,并且为此阶段配置的inputBuffer
的大小将成为最大数量最快[[org.reactivestreams.Subscriber]]的元素可以超过最慢的元素,然后由于背压而减慢处理速度。
我的问题是我不知道如何设置此inputBuffer值"用于此阶段"。我见过的最接近的this article的Dropping Broadcast部分对此进行了描述,但这似乎坚持使用Flow DSL。我相信我无法使用DSL,因为我需要不断添加新订阅者。
结果,我的整体流速率被最慢的用户阻止。我正在尝试做的一个相关方面涉及确保不同的订阅者在不同的线程上运行(没有创建显式的actor作为订阅者)。
答案 0 :(得分:2)
它看起来像(对于Akka Streams 2.0.1):
Sink.asPublisher(true).addAttributes(Attributes.inputBuffer(initialSize, maxSize))