gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:03:52 27 4
gpt4 key购买 nike

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

在 Ignite Service A 的执行函数中:

cacheA.invoke(record){ // do process to record

igniteQueue.put(processed_record);

}

在Ignite Service B的执行函数中:

saved_processed_record = igniteQueue.take();

当TPS较低时,它运行顺利,但是当我以高TPS运行时,有时我会在日志中收到“ strip 池中可能出现饥饿”的信息,

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

看来我在cache.invoke中使用igniteQueue与在cache.invoke中使用ignitecache也不正确?

那么如果我无法在cache.invoke()中使用ignite队列,是否有更好的方法呢?我尝试使用另一个消息队列(kafka或redis)代替缓存中的ignite队列,但我们知道Ignite说它也是一个消息队列,在ignite调用中使用kafka似乎很奇怪,我如何使用纯ignite来实现这个?

最佳答案

您不应该从“invoke(..)”方法发出任何阻塞操作,因为它在 key 上的锁内执行。相反,为什么不创建另一个线程池并让它负责从 IgniteQueue 添加和获取对象。然后,您可以简单地从“invoke(..)”方法向该线程池提交一个任务,并在该任务中将一个对象排入队列。

关于java - 我可以在另一个cache.invoke()函数中使用igniteQueue吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51142683/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com