ApacheIgnite侦听本地节点中对象的状态更改
我正在调查一个用例,其中ignite必须侦听数据网格中对象属性的更改,并对该对象执行一些操作。为了提高性能,我希望处理在数据所在的同一节点上完成ApacheIgnite侦听本地节点中对象的状态更改,ignite,Ignite,我正在调查一个用例,其中ignite必须侦听数据网格中对象属性的更改,并对该对象执行一些操作。为了提高性能,我希望处理在数据所在的同一节点上完成 当对象的属性已更改为特定值时(例如,对象“X”具有属性“state”,该属性从“created”设置为“scheduled”),如何获取事件,并确保仅从对象所在的节点获取事件 我如何确保当我获取事件并开始处理它时,在处理完成之前,没有其他人更改对象(只允许读取)(换句话说,事务在拾取事件后立即开始) 如何确保将处理代码部署到所有节点(处理是无状态的)
- 当对象的属性已更改为特定值时(例如,对象“
”具有属性“X
”,该属性从“state
”设置为“created
”),如何获取事件,并确保仅从对象所在的节点获取事件scheduled
- 我如何确保当我获取事件并开始处理它时,在处理完成之前,没有其他人更改对象(只允许读取)(换句话说,事务在拾取事件后立即开始)
- 如何确保将处理代码部署到所有节点(处理是无状态的),并且它仅对本地数据进行操作(数据对象和代码之间没有硬链接,换句话说,如果处理代码在将来更新,对象将保持不变)
// Local listener that listenes to local events.
IgnitePredicate<CacheEvent> locLsnr = evt -> {
// CODE
return result;
};
// Subscribe to specified cache events occuring on local node.
ignite.events().localListen(locLsnr,
EventType.EVT_CACHE_OBJECT_PUT);
//侦听本地事件的本地侦听器。
点火开关locLsnr=evt->{
//代码
返回结果;
};
//订阅在本地节点上发生的指定缓存事件。
ignite.events().localListen(locLsnr,
EVT_缓存_对象_放置);
- 在
块中;我必须检查“code
”上的evt.newValue()
更改,不能早一点进行吗?也就是说,作为一个局部监听的参数状态
- 在
块中,在我返回结果之前对象是否已锁定?换句话说,就是在这里,我确信没有人可以改变这个对象,我可以安全地改变我的对象吗?在我看来,在“谓词”定义中而不是在处理程序类中这样做是一个奇怪的地方code
- 事件监听器在值更新后立即调用,因此我认为检查监听器中您感兴趣的字段是可以的。如果字段没有更改,请立即返回
- 对象被锁定,因为侦听器在条目的同步块内被调用。您可以修改同一个对象,但我不建议在侦听器中执行任何同步操作,如缓存更新,因为它容易出错,并且会影响性能。您应该异步执行此操作,以便尽快释放锁