队列使用表

时间:2008-11-11 10:21:47

标签: queue message-queue queue-table

我需要使用表来实现队列。 业务要求是拥有一个队列,该队列将被5-10个盒子访问以获得下一个工作/工作。每天不会超过5000个工作岗位。此外,一批工作应该一次“出列”。

只是想知道我可能遇到的问题领域和问题是什么,因为我之前没有这样做过。如果有人在此之前已经面对这个/完成了这个,你能否请我指出一个设计/样本实施或需要注意的问题。

由于

4 个答案:

答案 0 :(得分:3)

有很多通用排队或消息服务。即使您想要实现自己的系统,也可以尝试查看其他几个系统。首先想到的是JMS(Java Message Service),其中包含Apache ActiveMQOpenJMSJBoss 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。

但是你提出的方法会导致失去作业请求以防作业系统失败/崩溃。

我在考虑一个包含以下列的队列表

  • RequestID / MessageID(主键)
  • LockedBy(正在处理请求的人)
  • LockedTime(当请求被锁定以进行处理时)
  • RequestedTime(当请求被添加到队列时)
  • 完成时间(请求完成时)
  • 状态(待处理/已处理)
  • RequestMessage(在我的情况下是序列化的java对象)
  • 请求者(将请求排队)

我可以编写一个存储过程[GetNextItemsInQueue],它返回一个允许10个请求的列表,设置锁定时间和锁定时间。如果“锁定时间”增加指定的限制,则可以将记录恢复为“待定”状态。

有这个问题吗?