我有一个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删除,我不会遇到问题,但似乎我肯定会在某处丢弃行。
由于
答案 0 :(得分:0)
这对我来说只是一个愚蠢的错误。我的初始代码测试(在jdbc中)在其中一个线程中自动提交,我无法显式提交。这导致我认为有些行被丢弃了。
我现在可以按照预期确认这种模式。