微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

两个实例轮流从Hazelcast阻塞队列中获取,如何尽可能避免读取重复项

如何解决两个实例轮流从Hazelcast阻塞队列中获取,如何尽可能避免读取重复项

这里有一些背景: 我们有几个服务实例共享一个 Hazelcast 阻塞 quque,该服务主要有两个任务:

  1. 一个调度程序将项目永久地放入队列,假设每 5 分钟放入 100 个项目

  2. 一个班级在看队列,只要它有任何项目就会开始处理(基本上一个项目可能需要 1 到 2 秒来处理)

我对上述解决方案有几个疑问:

  1. 如果任何两个实例同时运行调度程序,如何避免向队列添加重复项(例如,如果队列中有“A”、“B”、instanceA会放'A','D',肯定可以过滤掉A,因为它在队列中,所以instanceA会将D放入队列,同时instanceB也放入D,因为它的本地队列当时没有D )

  2. 如何避免 instanceA 和 instanceB 取重复项(例如,实例 A 取第一项,但队列尚未同步到实例 B,实例 B 是否也会取相同的第一项? ?) 我们可能不需要严格避免重复项,但尽量避免。

通过电话编辑,如有拼写问题,请见谅。也许更好的解决方案是转向 redis 或其他集中方式?

解决方法

我不熟悉 Hazelcast。但我知道 Redis 有解决方案。

  1. 如何避免队列中出现重复项?

您可以使用Redis Set来存储不重复的项目,在将项目推送到redis消息队列之前,只需检查Redis Set中是否存在项目,如果存在,则退出推送操作。>

  1. 如何避免物品被重复使用?

可以使用Redis List作为消息队列,通过rpop原子操作,instanceA和instanceB不能取重复项。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。