java - 如何序列化 Runnable 以在另一个 infinispan 节点上执行代码
问题描述
我正在尝试在 infinispan 集群的成员节点上执行一些代码,但我一直收到相同的错误。
org.infinispan.commons.marshall.NotSerializableException:
用例非常基本。有一个只有协调节点知道并希望在其成员节点之间分配一些工作的单元列表。
基本上我只想用我的 args 远程调用一个方法。就是这样,就是这样,简单明了。
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);
}
}
我的目标是让成员节点使用节点上下文(它自己的Processor,这是一个 @Autowired spring @Component)执行 Runnable。
我在这里和那里尝试了不同的方法,例如静态,扩展和/或实现 Runnable、Serializable 等的类。我尝试的最后一件事是使用观察者模式而不是调用处理器来调用静态OBSERVABLE.notifyObservers(unit )(将处理器添加为观察者)。但是我得到了相同的输出,此时它只是反复试验。我没有想法,我将不胜感激有关这方面的一些指导或指导。
解决方案
正如@Mudokonman 在他的评论中所写,(Runnable & Serializable)
语法是 find,但 lambda 捕获的所有变量Serializable
也必须是。这包括this
lambda 调用非静态方法时的隐式。
您可以尝试-Dsun.io.serialization.extendedDebugInfo=true
准确找出 lambda 的哪一部分不可序列化。
推荐阅读
- python - 确定网页的结尾
- python - 使用 astroquery 搜索列表
- wordpress - 在后端产品页面中创建自定义隐藏字段并在 WooCommerce 产品中使用值排序方式
- javascript - 为什么 slideDown() 函数在 JQuery 事件处理程序中不起作用?
- identityserver4 - IdentityServer:SigningCredential 和 DataProtection 有什么区别?
- python - 用正则表达式替换单词列表
- python - 如何使用 python 暂停声音/歌曲?
- python - 在记录期间引发异常
- python - 使用 Beautiful Soup AttributeError: 'NoneType' 在 Python 中抓取表格
- .net - HttpWebRequest 的行为不同于 .NET 5.0 和 .NET Framework