ResolverService使用的消息包括ResolverQueryMsg和ResolverResponseMsg,这些消息中只能加载字符串类型的数据,因此不能支持序列化,无法利用序列化带来的好处。无法序列化使得许多设计模式没有了用武之地。
一个解决方式是将对象序列化后的字节数组重新编码为字符串(可以借助某些库例如commons-codec实现),但是这样处理是否太丑了;而且有违ResolverService的原意(否则它就应该提供二进制传输的能力)。
在使用管道进行通信时是支持二进制消息的。
----------------------------------------------------------------------------------------------------------
ResolverService只能注册一个handler,那么所有的请求、响应都必须在这个handler中处理吗?
DiscoveryService底层也是使用ResolverService,它又是怎么对请求/响应进行处理的,它不会与其他在同一个对等组中使用ResolverService(比如我们自己利用ResolverService实现的某些功能) 的功能冲突么???有时间参考一下DiscoveryService的源代码,看看它是怎样做到ResolverService在功能上的隔离的。
现在想想DiscoveryService也有同样的问题啊? 凡是注册过的监听器,只要有消息,都会收到通知。但怎样知道是不是自己感兴趣的消息呢?
-----------------------------------------------------------------------------------------------------------
唔,刚看了下源代码,不同服务使用的ResolverService会注册不同的handler,它们的键值不同(通常是服务通告的ModuleClassID)。
因此多个使用ResolverService的服务之间不会冲突,DiscoveryService不会与其他的服务冲突。