首先是 message 表:
字段名 | 类型及描述 |
---|---|
id | 主键 |
status | 消息状态(待处理,进行中,成功,失败) |
try_count | 消费者重试次数 |
lock_expires | 锁过期时间 |
created | 创建时间 |
data | 消息数据 |
然后消费端轮询:
select *
from message
where status in ('PENDING', 'STARTED', 'FAILED')
and try_count < max_tries
and lock_expires < now()
order by created
limit 1 for update
skip locked;
解释下 sql:
利用关系数据库持久化消息,支持索引,可以灵活检索,关键是无需额外引入组件,请问这种方案是否可行呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.