【发布时间】:2018-12-30 08:27:33
【问题描述】:
我正在尝试为票实施多队列系统。
我正在使用 Spring Boot 异步接收票证请求。
要求是我收到许多带有特定类型键的票。
对于我收到的每张票,我需要根据它们的类型键将它们放入队列中。
例如,我收到 A 类型的票,如果已经有 A 的队列,我应该将票放入该队列中,否则,我应该为 A 类型创建一个新队列,如果我收到另一个请求 A,我需要等待直到第一个 A 请求完成处理。
我已经上传了一张图片来准确显示我正在尝试做的事情。
我想知道解决这个问题的好方法。我知道如何为请求创建一个 FIFO 队列,但我很难创建动态多队列。
【问题讨论】:
-
你知道门票的所有可能键是什么吗?为什么没有
n队列,其中n是可能的键数? -
@Alexandre Dupriez 我不知道创建队列所需的键的所有可能值,以便为 n 个不同的请求键获得 n 个队列
-
如果您事先知道
n是有界的并且该边界“足够小”,则可以将每个键映射到其自己的队列。否则,可能有一个队列,多个消费者将从该队列中轮询某个键的请求,跳过队列中与消费者键不对应的元素。请求的顺序被保留。您需要为共享队列中的每个使用者维护一个游标。此外,为了合理有效,我们可以考虑使用链表。你有多少请求/秒? -
问题是,我不知道有多少个键,我能知道的唯一方法是当我从请求中获取它们时,请求是异步和随机的,这意味着我可以有 50 个每秒请求或每天 1 个请求。
-
主要目标是当我收到 3 个请求,每个请求具有不同的密钥类型时,我需要同时处理它们。如果我收到 3 个相同密钥类型的请求,那么我需要一个一个地处理它们。
标签: java multithreading spring-boot dynamic queue