我有一个 mysql 表用作消息队列:
id | message_text
这是一张InnoDB表,id字段是一个自增整型字段。
生产者应用程序有多个执行插入操作的线程,例如:
insert into my_table(message_text) values('the text');
消费者应用程序每五秒运行一次。它选择 50 条记录,然后按行 ID 删除每条记录:
rows = select * from my_table limit 50;
for (row : rows) {
delete from my_table where id = row.id;
}
消费者应用似乎看不到所有行。只有一个生产者应用程序实例在运行,它在单个线程中进行选择。生产者应用打印以控制它插入的所有消息,消费者应用也打印它处理的每一行,但缺少行。
我想因为我是通过行 ID 明确删除的,所以我不会遇到问题,但看起来我肯定是在某处删除了行。
谢谢
最佳答案
啊,这只是我犯的一个愚蠢的错误。我的初始代码测试(在 jdbc 中)在其中一个线程中关闭了自动提交,但我未能明确提交。这导致我认为某些行被丢弃了。
我可以确认此模式现在按预期工作。
关于mysql - mysql 中的生产者/消费者表 - 缺少行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22593519/