我可以在另一个cache.invoke()函数中使用igniteQueue吗?
在点燃服务A的执行功能中:
cacheA.invoke(record){//执行记录过程
igniteQueue.put(processed_record);
}
在点燃服务B的执行功能中:
saved_processed_record = igniteQueue.take();
=================
当TPS较低时,它运行平稳,但是当我以高TPS运行时,有时会在日志中显示“条带化池中可能出现饥饿”,
似乎我在cache.invoke中使用igniteQueue与在cache.invoke中使用ignite缓存还是不正确?
因此,如果我不能在cache.invoke()中使用点火队列,是否有更好的方法呢?我已经尝试使用另一个消息队列(kafka或redis)来代替缓存中的ignite队列,但是我们知道Ignite表示它也是一个消息队列,在ignite invoke中使用kafka似乎很奇怪,我如何使用纯ignite来实现这一点?
答案 0 :(得分:2)
您不应通过“ invoke(..)”方法发出任何阻止操作,因为该方法在键的锁内执行。相反,为什么不创建另一个线程池,并让它负责从IgniteQueue中添加和获取对象。然后,您只需从“ invoke(..)”方法向该线程池提交任务,然后在该任务内部使对象排队。