问题描述
这里有一些背景: 我们有几个服务实例共享一个 Hazelcast 阻塞 quque,该服务主要有两个任务:
我对上述解决方案有几个疑问:
-
如果任何两个实例同时运行调度程序,如何避免向队列添加重复项(例如,如果队列中有“A”、“B”、instanceA会放'A','D',肯定可以过滤掉A,因为它在队列中,所以instanceA会将D放入队列,同时instanceB也放入D,因为它的本地队列当时没有D )
-
如何避免 instanceA 和 instanceB 取重复项(例如,实例 A 取第一项,但队列尚未同步到实例 B,实例 B 是否也会取相同的第一项? ?) 我们可能不需要严格避免重复项,但尽量避免。
通过电话编辑,如有拼写问题,请见谅。也许更好的解决方案是转向 redis 或其他集中方式?
解决方法
我不熟悉 Hazelcast。但我知道 Redis 有解决方案。
- 如何避免队列中出现重复项?
您可以使用Redis Set
来存储不重复的项目,在将项目推送到redis消息队列之前,只需检查Redis Set
中是否存在项目,如果存在,则退出推送操作。>
- 如何避免物品被重复使用?
可以使用Redis List
作为消息队列,通过rpop
原子操作,instanceA和instanceB不能取重复项。