我可以在另一个cache.invoke()函数中使用igniteQueue吗?

时间:2018-07-02 19:35:41

标签: apache ignite

我可以在另一个cache.invoke()函数中使用igniteQueue吗?

在点燃服务A的执行功能中:

cacheA.invoke(record){//执行记录过程

igniteQueue.put(processed_record);

}

在点燃服务B的执行功能中:

saved_processed_record = igniteQueue.take();

=================

当TPS较低时,它运行平稳,但是当我以高TPS运行时,有时会在日志中显示“条带化池中可能出现饥饿”,

请参阅我以前的文章: Ignite service hangs when call cache remove in another cache's invoke processor, " Possible starvation in striped pool"?

似乎我在cache.invoke中使用igniteQueue与在cache.invoke中使用ignite缓存还是不正确?

因此,如果我不能在cache.invoke()中使用点火队列,是否有更好的方法呢?我已经尝试使用另一个消息队列(kafka或redis)来代替缓存中的ignite队列,但是我们知道Ignite表示它也是一个消息队列,在ignite invoke中使用kafka似乎很奇怪,我如何使用纯ignite来实现这一点?

1 个答案:

答案 0 :(得分:2)

您不应通过“ invoke(..)”方法发出任何阻止​​操作,因为该方法在键的锁内执行。相反,为什么不创建另一个线程池,并让它负责从IgniteQueue中添加和获取对象。然后,您只需从“ invoke(..)”方法向该线程池提交任务,然后在该任务内部使对象排队。