Akka Remote和通过自定义反序列化拦截未知类

Akka Remote and interception of unknown classes through custom deserialization

Problem/Context。我需要向远程参与者发送一些消息。这些消息可能包含收件人未知的 class 对象。我需要拦截这种情况以避免 ClassNotFoundException.

一个解决方案可能包括在消息反序列化时拦截未知的classes。然后,该消息可能会被不同的应用程序级消息替换,以便远程参与者可以向发送者传达它没有所需的 classes.

我不知道这样的拦截是否可行,因为自定义de/serializators必须实现akka.serialization.Serializer,它有下面的方法

def fromBinary(bytes: Array[Byte],
               clazz: Option[Class[_]]): AnyRef

现在,问题源于为未知 class 对象构建 Class 对象(由 Akka 完成)。

有没有办法在较低级别自定义 Akka 反序列化以满足我的需求?

其他解决方案

事实 1. 其实我发现有一个反序列化的替代方法 Class 类型提示,即 反序列化与字符串清单.参考:http://doc.akka.io/docs/akka/2.4.0/scala/serialization.html#Serializer_with_String_Manifest

注意:它不适用于 Akka < 2.4.0。这可能很重要,因为从 Akka 2.4.0 开始,对 Java 1.6/1.7 的支持被删除了。这意味着要使用 Akka 2.4,您需要 Java 8.

事实 2. 我还发现您的 Akka 不一定会为您提供类型提示。您可以通过以下方式禁用类型提示

class MyOwnSerializer extends akka.serialization.Serializer {
   override def includeManifest: Boolean = false // !!!