首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从hazelcast客户端连接到hazelcast服务器

从hazelcast客户端连接到hazelcast服务器
EN

Stack Overflow用户
提问于 2015-03-25 21:38:59
回答 2查看 2K关注 0票数 0

我使用如下配置运行hazelcast服务器,

代码语言:javascript
运行
复制
Config config = new Config();

// **MapConfig**

config.setMapConfigs(getMapConfig());

// **Serialization factory**

config.setSerializationConfig(getSerializableFactory());

在这种情况下,当hazelcast服务器在远程机器上运行时,我必须从hazelcast客户端连接到我的hazelcast服务器。

但当我尝试通过Hazelcast客户端连接时,

代码语言:javascript
运行
复制
ClientConfig clientConfig = new ClientConfig();
clientConfig.getNetworkConfig().addAddress(IP:PORT);

我可以连接到Hazelcast服务器,

但当我获得map hazelcast.getMap(test).values()时,它显示了一个异常,即它期望在hazelcast客户端配置中配置我的序列化工厂。

因此,当我添加序列化配置时,序列化工厂类指向bean

代码语言:javascript
运行
复制
clientConfig.setSerializationConfig(getSerializableFactory());

它工作得很好,

那么有没有一种不使用序列化配置就可以连接到Hazelcast服务器的方法呢?原因是如果我将在hazelcast服务器(在远程位置)中更新的bean中发生任何更改,我也必须在我的hazelcast客户端中更新它。

谢谢和问候,哈里

EN

回答 2

Stack Overflow用户

发布于 2015-06-15 13:57:21

显然,您类使用自定义序列化,因此需要工厂。我使用Spring而不是运行时配置,也不必配置序列化--直到我开始使用优化的Portable而不是Java的标准Serializable。

切换到Serializable将解决您的问题,但自定义序列化更好--速度是java.io.Serializable的两倍。不幸的是,您需要对其进行配置。

顺便说一句,这适用于任何Hazelcast配置。它应该在集群中的任何地方都是完全相同的。也许有一天,他们会取消对瘦客户端的要求。你将如何实现这样的东西?使用Spring或Hazelcast自己的XML的一个原因是将其放在某个共享位置,或者通过Maven包含在每个JAR/WAR中。

您在这里提到了另一个问题:版本控制和兼容性。通常,我会避免在不同的集群节点上使用同一个类的不同版本。虽然Hazelcast可以通过自定义序列化来处理它(如果我没有弄错的话,是可移植的)。

在任何情况下,如果您坚持使用Java进行初始化,那么可以使用一个XML配置或一个基类(方法等)来初始化代码。将它放在某个JAR中,到处引用它(作为Maven依赖项),问题就解决了。

票数 0
EN

Stack Overflow用户

发布于 2020-06-29 18:36:13

关键是要知道Hazelcast尝试识别对象的序列化类型的顺序

当Hazelcast序列化对象时:

  1. 它首先检查对象是否为null。

如果上述检查失败,则Hazelcast将检查它是com.hazelcast.nio.serialization.DataSerializable还是com.hazelcast.nio.serialization.IdentifiedDataSerializable.的实例

如果上述检查失败,则

  1. 将检查它是否为Hazelcast的实例

  1. 如果上述检查失败,则Hazelcast将检查它是否是某个默认类型的实例(请参阅序列化一章中的介绍了解默认类型)。

  1. 如果上述检查失败,则Hazelcast将查找用户指定的自定义序列化程序,即ByteArraySerializer或StreamSerializer的实现。使用输入对象的Class及其父类搜索自定义序列化程序,直至搜索Object。如果父类搜索失败,则还会检查该类实现的所有接口(不包括java.io.Serializable和java.io.Externalizable).

  1. 如果上述检查失败,则Hazelcast将检查它是否是java.io.Serializable或java.io.Externalizable的实例,并且全局序列化程序未注册到Java序列化覆盖功能。

  1. 如果上述检查失败,则Hazelcast使用注册的全局序列化程序。

  1. 如果上述所有检查都失败,则序列化将失败。当一个类实现多个接口时,上述步骤对于确定Hazelcast使用的序列化机制非常重要。当这些序列化中的任何一个需要类定义时,您需要将应用程序所需的所有类放在类路径中,因为除非您使用的是用户代码deployment.

,否则Hazelcast不会自动下载它们

有关更多信息,请参阅参考手册Here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29257325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档