相关疑难解决方法(0)

在mysql中实现消息队列表的最佳方法是什么

这可能是我第十次实施这样的事情,而且我从未对我提出的解决方案百分百满意.

使用mysql表而不是"正确"的消息传递系统的原因很有吸引力,主要是因为大多数应用程序已经将一些关系数据库用于其他东西(对于我一直在做的大多数事情,它往往是mysql),而很少有应用程序使用消息传递系统.此外 - 关系数据库具有非常强大的ACID属性,而消息传递系统通常没有.

第一个想法是使用:

create table jobs(
  id auto_increment not null primary key,
  message text not null,
  process_id varbinary(255) null default null,
  key jobs_key(process_id) 
);

然后入队看起来像这样:

insert into jobs(message) values('blah blah');

出列似乎是这样的:

begin;
select * from jobs where process_id is null order by id asc limit 1;
update jobs set process_id = ? where id = ?; -- whatever i just got
commit;
-- return (id, message) to application, cleanup after done

表和入队看起来不错,但出队有点困扰我.回滚的可能性有多大?还是被封锁了?我应该用什么键来制作O(1)-ish?

或者,我正在做什么更好的解决方案?

mysql job-queue

29
推荐指数
4
解决办法
2万
查看次数

针对消息传递系统中的表的队列

我一直在体验真实生产环境中消息传递系统的优点和缺点,我必须承认,每次任何其他形式的消息传递队列时,组织良好的表或表模式都会跳动,因为:

  1. 数据永久存储在表格中.我已经看到很多java(jms)应用程序在未捕获的异常或其他错误的路上丢失或消失了消息.
  2. 队列往往会填满.相反,Db存储几乎是无限的.
  3. 表格很容易访问,而您必须使用esotic工具从队列中读取.

您对每种方法有何看法?

database queue message-queue

16
推荐指数
4
解决办法
7416
查看次数

SQL Server,使用表作为队列

我使用SQL Server 2008 R2作为排队机制.我将项添加到表中,外部服务读取并处理这些项.这很好用,但缺少一件事 - 我需要机制,我可以尝试从表中选择一行,如果没有,则阻塞直到有(优选在特定的时间段内).

任何人都可以建议我如何实现这一目标?

sql sql-server queue sql-server-2008

6
推荐指数
3
解决办法
2万
查看次数