Java:具有长期使用者的并发队列,以及短期使用者的处理保证

时间:2018-10-13 19:04:11

标签: java concurrency producer-consumer

我正在寻找并发队列的现有实现,该实现可用于实现典型的生产者-消费者模式,并附带以下警告。每个生产者都是短暂的,但是在退出之前必须阻塞,直到消费者处理完它放在队列中的所有消息为止。消费者和队列是长期存在的。

我曾经有过一些想法,要么使用单个分区队列,其中每个分区都分配给一个生产者,要么为每个生产者分配一个专用队列,然后在生产者队列的顶部构建一种复合队列,供生产者队列使用。消费者。

对于HTTP服务器来说,这似乎是一种常见的模式,它具有大量的HTTP线程,它们充当队列的生产者,并具有固定数量的工作线程,其充当队列的使用者。然后,http威胁将被阻止,直到消费者将返回的工作完全由消费者处理,然后再将http响应返回给http客户端。

1 个答案:

答案 0 :(得分:2)

  

每个生产者都是短暂的,但是在退出之前必须阻塞,直到消费者处理完它放在队列中的所有消息为止。消费者和队列是长期存在的。

git commit --amend执行此操作。这是一种常见的模式,可以通过几种方法解决,例如ExecutorService.submit(task)+ Future.get()。

  

在生产者队列的顶部构建一种复合队列

我会尝试使其尽可能简单。

最有效的方法取决于您的任务工作量。例如是CPU还是IO绑定。

  

从队列中拉出1000条消息,处理消息,将成功处理的消息通知生产者;

Stream.parallelStream()