![]() |
1
3
用管理项目状态的逻辑包装队列有意义吗?
这样,状态管理总是与队列操作相关(并包含在队列操作中)……
显然
|
![]() |
2
3
我发现您的模型在一致性、状态控制和可伸缩性方面可能有所改进。 实现这一点的一种方法是将项目与您的状态相耦合,将这对项目排队和出列,并创建一种机制来确保状态更改。 我的建议如下图所示:
根据这个模型和您的示例,我们可以:
每个任务运行操作
itemstate已确认下一个状态正在创建自我控制状态的机制:
使用itemstate实现:
可伸缩,因为您可以控制更多的状态
结果:
更新(2018年7月6日):分析地图搜索的使用 使用诸如comparator之类的等于值在map中搜索可能不起作用,因为通常值和标识(key/hash)之间的映射不是一对一的(参见下图)。这样就需要为搜索结果为o(n)(最坏情况)的值创建一个排序列表。
具有
在这种情况下,你必须
要搜索,必须使用concurrentmapref.get(key)。结果将引用更新的itemstate。 我的测试结果是:
代码中的更多详细信息: https://github.com/ag-studies/stackoverflow-queue 2018年9月6日更新:重新设计 概括这个项目,我可以理解状态机是这样的:
通过这种方式,我将队列的工作线程分离,以改进概念。我用了一个备忘录来保存整个流程中项目的唯一引用。 当然,如果需要将itemstate保存在物理存储库中,可以使用基于事件的策略。 这保留了先前的想法,并为概念创建了更清晰的形式。请参阅:
我知道每个作业都有两个队列(输入/输出)以及与业务模型的关系! 研究者总是会发现项目的最新和最一致的状态 . 所以,回答你的问题:
|
![]() |
3
1
如前所述,包装队列或项目将是可行的解决方案或两者兼而有之。
可能有一个更好的方法,已经回答过了,就是有一个更新队列状态的queuewrapper。为了好玩,我不使用状态映射,但我使用以前的itemwrapper,它看起来更干净(状态映射也可以工作)。
您还可以使用aop在队列中注入状态更新,而无需更改队列(状态映射应该比itemwrapper更合适)。 也许我没有很好地回答你的问题,因为知道你的物品在哪里的一个简单方法是使用“contains”函数签入每个队列。 |
![]() |
4
1
这里有些不同于其他人所说的话。从队列服务和系统的世界中,我们得到了消息确认的概念。这很好,因为它还提供了一些内置的重试逻辑。 我将从更高的层次上阐述它的工作原理,如果您需要,我可以添加代码。
基本上你会有一个
一次
返回状态的方法只需检查项目所在的队列或集合。 请注意,这将提供“至少一次”传递,意味着项目将至少处理一次,但如果处理时间太接近超时,则可能会多次处理。 |
![]() |
András Takács · Python多线程问题 10 月前 |
![]() |
Sisoviromol · 将主类的状态传递给另一个进程中的工人 1 年前 |
|
Yashas Nadig · 调用堆栈lifo队列是否正确? 1 年前 |
![]() |
ahnherin092 · 使用C中的链表实现队列 1 年前 |