我正在寻找并发队列的现有实现,该实现可用于实现典型的生产者-消费者模式,并附带以下警告。每个生产者都是短暂的,但是在退出之前必须阻塞,直到消费者处理完它放在队列中的所有消息为止。消费者和队列是长期存在的。
我曾经有过一些想法,要么使用单个分区队列,其中每个分区都分配给一个生产者,要么为每个生产者分配一个专用队列,然后在生产者队列的顶部构建一种复合队列,供生产者队列使用。消费者。
对于HTTP服务器来说,这似乎是一种常见的模式,它具有大量的HTTP线程,它们充当队列的生产者,并具有固定数量的工作线程,其充当队列的使用者。然后,http威胁将被阻止,直到消费者将返回的工作完全由消费者处理,然后再将http响应返回给http客户端。
答案 0 :(得分:2)
每个生产者都是短暂的,但是在退出之前必须阻塞,直到消费者处理完它放在队列中的所有消息为止。消费者和队列是长期存在的。
git commit --amend
执行此操作。这是一种常见的模式,可以通过几种方法解决,例如ExecutorService.submit(task)+ Future.get()。
在生产者队列的顶部构建一种复合队列
我会尝试使其尽可能简单。
最有效的方法取决于您的任务工作量。例如是CPU还是IO绑定。
从队列中拉出1000条消息,处理消息,将成功处理的消息通知生产者;
Stream.parallelStream()