Scala:合并并发HTTP请求

时间:2016-10-23 17:27:22

标签: scala concurrency http-post kafka-consumer-api

为了减少每秒的请求数,如何将多个并发(POST)请求安全地合并到一个批量请求中?

// for instance, does a thread-unsafe batched POST risk data loss/dupes?
val data = scala.collection.mutable.Queue[String]()

// simple kafka-client reading from multiple partitions
kafkaConsumerIter.foreach { concurrentIncomingData  =>
    data.enqueue(s"request data: $concurrentIncomingData")
    if (data.length % 1000 == 0) {
        val postData = data.dequeueAll(_ => true).mkString

        ...post a batch of roughly ~1000 in a single request...
    }
}

这种批处理方法可以实现每秒减少请求数,同时保持队列大小合理地低于其规模(预计根本不会增长),但这种方法是否存在数据丢失或重复的风险?

使用java.util.concurrent.ConcurrentLinkedQueue的实施会更安全吗?如果是这样,dequeue整个(全部)ConcurrentLinkedQueue最安全的方法是什么?

0 个答案:

没有答案