我已经创建了一个使用GridGain实现的消息传递系统。我有一个由GridGain GridProjection组成的MessageCenter类,我的设置如下所示
Gateway-> MessageCenter-> GridProjection现在,当我启动网关,这反过来又启动网格,启动另一个网关时,我收到序列化错误,因为GridGain试图序列化网关、MessageCenter及其所有依赖项,这迫使我将所有内容标记为可序列化。
我不明白为什么GridGain试图序列化它的父类,这应该与网格无关,它们是关闭网格的一种方法吗?
发布于 2014-09-17 01:50:24
从所提供的描述看,您似乎是在向远程节点发送匿名闭包/消息。
匿名类隐式捕获对封闭类的引用,从而强制GridGain对其进行序列化。这里干净的解决方案是将匿名闭包/消息移动到一个静态内部类中。这样,您将完全控制要序列化的内容。
发布于 2014-09-17 18:38:02
是我的错。我通过切换到Hazelcast发现了这个问题。我有一个messenger类,它既有一个接收方法,又可以注册一个侦听器。信使驻留在网格集群(GridGain或Hazelcast)中的队列中。这要求信使是可序列化的,这又意味着任何注册的侦听器也必须是可序列化的。
My Gateway具有可运行的处理程序,这些处理程序注册到信使程序以处理传入的消息,因此进行反向序列化。
我在GridGain中找不到这一点,因为GridGain在新成员加入网格并尝试序列化其队列中的对象时预先进行序列化,另一方面,Hazelcast直到运行时才序列化
https://stackoverflow.com/questions/25866741
复制相似问题