我需要使用表来实现队列。 业务要求是拥有一个队列,该队列将被5-10个盒子访问以获得下一个工作/工作。每天不会超过5000个工作岗位。此外,一批工作应该一次“出列”。
只是想知道我可能遇到的问题领域和问题是什么,因为我之前没有这样做过。如果有人在此之前已经面对这个/完成了这个,你能否请我指出一个设计/样本实施或需要注意的问题。
由于
答案 0 :(得分:3)
有很多通用排队或消息服务。即使您想要实现自己的系统,也可以尝试查看其他几个系统。首先想到的是JMS(Java Message Service),其中包含Apache ActiveMQ,OpenJMS或JBoss Messaging等实现。那么你也有很多非开源产品。
首先想到的是Amazon Simple Queue Service。有几种产品实现了相同类型的界面,例如django-queue-service。
祝你好运!答案 1 :(得分:2)
问题领域:
当然还有这个:
快乐的编码!
答案 2 :(得分:2)
这听起来不太难;只需包含一个时间戳,您可以在输入作业时对其进行排序。根据数据库的不同,可以使用当前时间戳自动填充此字段。
获取作业时,就像在事务中放入SELECT和DELETE语句一样简单。如果您觉得不舒服,可能会这样做:
UPDATE tblQueue SET mark = <unique application id> WHERE mark IS NULL ORDER BY timestamp ASC LIMIT 1
SELECT * FROM tblQueue WHERE mark = <unique app id>
DELETE FROM tblQueue WHERE mark = <unique app id>
通过使用此设置,您可以避免交易,如果他们吓到您。
您对批次的定义有些不清楚;如果你只是意味着我应该能够一次处理10个项目,只需将第一个查询的LIMIT 1子句更改为LIMIT 10。
如果您的意思是可以对作业进行分组,则可能需要一个作业队列,并将子项放在另一个表中(这不是队列,只是一个带有指向作业项的外键的常规表)。
答案 3 :(得分:0)
谢谢Vegard。
但是你提出的方法会导致失去作业请求以防作业系统失败/崩溃。
我在考虑一个包含以下列的队列表
我可以编写一个存储过程[GetNextItemsInQueue]
,它返回一个允许10个请求的列表,设置锁定时间和锁定时间。如果“锁定时间”增加指定的限制,则可以将记录恢复为“待定”状态。
有这个问题吗?