act机制总结
1、spout发送的一条消息,会有系统生成一个ROOTID(一个64为随机数)
2、由于用户在发送数据的时候,指定了meeeageId,所以在发送数据的时候,会创建一个pendingMap
map以ROOTID为key,以用户的messageId为value
DataTuple:含有数据
ActTuple:不含有数据 含有ROOTID 锚点ID
3、spout将数据发送给bolt的时候,不仅发送了一份DataTuple给下游的bolt,还发送一份ActTuple消息给ActBolt
区别ActTuple没有数据,只有rootID和锚点id
4、bolt处理完业务逻辑后,发送一份act信号,把act信号转化为actTuple
5、acter Bolt将接受到的ActTuple 使用异或的算法进行计算(将锚点ID进行异或) 产生结果是<ROOTID,VALUE ==0>
6、 一旦消息处理成功 acter Bolt 发送一个tuple出来 标志消息处理成功 然后将ROOTID转化为messageid <messageid,VALUE ==0>发送给spout调用act
ROOTID:用来标志一条消息 锚点id 均是一个64位的随机数 也是用来区别tuple
ROOTID、锚点ID、messageid区别:
messageid:是用户在spout发送消息时指定的
ROOTID、锚点ID:是随机生成的64位 的随机数
messageid和ROOTID会在发送消息时候放在一个pendingmap中 在acter bolt返回结果时候会通过这个pendingmap,由ROOTID找到对应的messageid