gpt4 book ai didi

java - 如何序列化 Runnable 以在另一个 infinispan 节点上执行代码

转载 作者:太空宇宙 更新时间:2023-11-04 09:27:01 25 4
gpt4 key购买 nike

我试图在 infinispan 集群的成员节点上执行一些代码,但总是遇到相同的错误。

org.infinispan.commons.marshall.NotSerializableException:

用例非常基本。有一个单元列表,只有协调器节点知道并希望在其成员节点之间分配一些工作。

基本上我只想用我的参数远程调用一个方法。就是这样,就是这样,简单明了。

private void processUnit(Unit unit)
{
Processor.process(unit);
}

public void distributeUnits(List<Unit> units)
{
for (int i = 0; i < units.size(); ++i)
{
Address target = getAddress(i);
ClusterExecutor executor = getExecutor();
executor.filterTargets(target).submit((Runnable & Serializable) () -> processUnit(unit);
}
}

我的目标是成员节点使用节点上下文执行 Runnable(它自己的处理器,这是一个 @Autowired spring @Component)。

我尝试过不同的方法,例如静态变量、扩展和/或实现 Runnable、Serialized 等的类。我尝试的最后一件事是使用观察者模式而不是调用处理器来调用静态 OBSERVABLE.notifyObservers(unit) (其中将处理器添加为观察者)。但我得到了相同的输出,此时它只是尝试和错误。我没有想法,希望能得到一些有关这方面的指示或指南。

最佳答案

正如 @Mudokonman 在他的评论中所写,可以找到 (Runnable & Serialized) 语法,但 lambda 捕获的所有变量也必须是 Serialized 。这包括 lambda 调用非静态方法时的隐式 this

您可以尝试-Dsun.io.serialization.extendedDebugInfo=true准确查找 lambda 的哪一部分不可序列化。

关于java - 如何序列化 Runnable 以在另一个 infinispan 节点上执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57554966/

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