济南达内培训的小编将messageID添加到unack集合中,并从队列的有序集中删除这个messageID.
如果上一步成功,则根据messageID从Redis集合中检索消息。
ACK
从unack集合中删除messageID.
从Message有效集合中删除messageID.
客户端未进行确认的消息,会被再度推回到队列中(这是一个定时任务负责检测)。
3、可用分区和机架意识
我们的队列是在Dynomite的JAVA客户端Dyno之上建立的,Dyno为持久连接提供连接池,并且可以配置为拓扑感知,此外,Dyno为应用程序提供特定的本地机架(在AWS中,机架是一个区域,例如 us-east-1a、us-east-1b等),us-east-1a的客户端将连接到相同区域的Dynomite/Redis节点,除非该节点不可用,在这种情况下该客户端将进行故障转移。这个属性被用于通过区域划分队列。

分片
队列根据可用区域进行分片,将数据推送到队列时,通过轮训机制确定分片,这种机制可以确保所有分片的数据是平衡的,每个分片都代表Redis中的有序集合,有序集中的key是queueName和AVAILABILITY _ZONE的组合。
避免全局锁
每个节点(上图中的N1…Nn)与可用性区域具有关联性,并且与该区域中的redis服务器进行通信。
Dynomite / Redis节点一次只能提供一个请求,Dynomite可以允许数千个并发连接,但是请求是由Redis中的单个线程处理,这确保了当发出两个并发调用从队列轮询元素时,是由Redis服务器顺序执行,从而避免任何本地或分布式锁。
在发生故障转移的情况下,确保没有两个客户端连接从队列中获取相同的消息。
处理Un-ACK的消息
后台进程监视UNACK集合中的消息,这些消息在给定时间内未被客户端确认(每个队列可配置)。这些消息将移回到队列中。
Dyno-queues分布式延迟队列的github地址是:
https://github.com/Netflix/dyno-queues
以上就是济南达内培训给大家做的内容详解,更多关于IT的学习,请继续关注济南达内培训