Apache点燃侦听本地节点中对象的状态更改

时间:2016-01-05 10:36:10

标签: ignite

我正在调查一个用例,其中ignite必须监听数据网格中对象属性的更改并对该对象执行某些操作。为了提高性能,我希望在数据所在的同一节点上完成处理。

  • 当对象的属性更改为特定值时,如何获取事件(例如,对象'X'具有属性'state',该属性设置为'来自“scheduled”的created'并确保仅从对象所在的节点中获取事件?

  • 如何确保当我收到事件并开始处理它时,没有其他人更改对象(只允许读取),直到处理完成(换句话说,事件会在事件发生后立即启动被接走了?

  • 如何确保处理代码部署到所有节点(处理是无状态的),并且它只对本地数据进行操作(数据对象和代码之间没有硬链接,换句话说,如果处理代码将来会更新,对象保持不变)

我从文档中得到的内容如下:

// 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);
  • CODE区块中;我必须检查“state”上的evt.newValue()更改,这不能早点完成吗? IE浏览器。作为localListen的一个参数以某种方式?

  • CODE块中,对象是否锁定,直到我返回结果?换句话说,是否在这里,我确信没有人可以更改对象,我可以安全地更改我的对象? IMO在'Predicate'定义中是一个奇怪的地方,而不是在处理程序类中。

斯文

1 个答案:

答案 0 :(得分:2)

斯文,

您的代码看起来正确,应该按预期工作。回答你的问题:

  • 在更新值后立即调用事件侦听器,因此我认为可以检查您对侦听器内部感兴趣的字段。如果字段未更改,请立即返回。
  • 对象被锁定,因为在条目的同步块内调用了侦听器。您可以修改同一个对象,但我不建议在侦听器中执行任何同步操作,如缓存更新,因为它容易出错并且会影响性​​能。您应该异步执行此操作,以便尽快释放锁。