java - Apache Ignite 2.0 Java 和 .NET : BasicBinaryIdMapper no longer works?

标签 java c# caching ignite

我的目标是运行 Java Ignite 节点并连接到它的 .NET 客户端。由于我遇到了一些问题,我采用了一个更简单的示例,该示例不是服务器/客户端模型,而是服务器/服务器模型。在 Ignite 2.0 之前,您可以在 Java 端设置 BinaryConfiguration,如下所示:

// Configure Ignite to connect with .NET nodes
BinaryConfiguration binCfg = new BinaryConfiguration();

binCfg.setIdMapper(new BinaryBasicIdMapper());
binCfg.setNameMapper(new BinaryBasicNameMapper());

这适用于此处显示的示例项目:https://ptupitsyn.github.io/Ignite-Multi-Platform-Cluster/

但是,如果您将这两个工作项目从 Ignite 1.7.0 升级到 Ignite 2.0.0,您现在将收到以下异常(这是来自 Java 端):

原因:class org.apache.ignite.spi.IgniteSpiException:本地节点的二进制配置不等于远程节点的二进制配置 [locNodeId=2d98d083-859f-4bae-bb9a-16fe00f9f39a, rmtNodeId=d9f68030-79b1-4e41- bd00-1bec44dca9e3、locBinaryCfg={globIdMapper=org.apache.ignite.binary.BinaryBasicIdMapper、compactFooter=true、globSerializer=null}、rmtBinaryCfg={globIdMapper=null、compactFooter =true, globSerializer=null}]

您会注意到,在上述异常中,Java 节点具有 BinaryBasicIdMapper 设置,但远程 .NET 节点不再具有此映射器,这导致了此异常。

我尝试了以下方法,但没有成功:

  • 删除 BinaryBasicIdMapper(可以连接到集群,但无法反序列化对象,出现“未知对”异常)。
  • 使用 true 参数创建 BinaryBasicNameMapper(以启用简单名称)。与上面相同的“未知对”异常(exception)。

我一直在搜索 Ignite 文档,试图找出在 Ignite 2.0 中做什么,但我找不到任何该做什么的示例。还有其他人遇到过这个问题吗?你是怎么解决的?

最佳答案

在 Ignite 2.0+ 中加入 Java 和 .NET 节点并将类型相互映射:

  • 使用BinaryBasicNameMapperSimpleName两侧
  • 请勿设置IdMapper
  • ignite.binary().type(Foo.class) 两边注册类型(Java) 和 ignite.GetBinary().GetBinaryType(typeof(Foo)) (.NET)
<小时/>

详细信息:

Ignite.NET 2.0+ 采用与 Java 之前相同的动态类型注册。在启动节点之前无需在 BinaryConfiguration 中注册类型。通常,您根本不需要费心注册类型(就像我们对 GetBinaryType 调用所做的那样)——类型会在第一次使用时自动注册。但是,当涉及多个平台时,您可能会遇到“未知对”异常,因为每个平台都在单独的数据结构中注册类型。为什么?因为在反序列化时,Ignite 需要实例化一个实际的类。在 .NET 中,此类可能是 Foo.Bar.Message ,在 Java 中org.foo.bar.Message 。因此,即使这两个类都映射到相同的 Ignite 二进制类型(简单名称映射器会丢弃命名空间/包),在反序列化时我们需要知道完全限定的名称。

我已经更新了 blog post有问题并将工作示例添加到 ignite-2.0 branch

关于java - Apache Ignite 2.0 Java 和 .NET : BasicBinaryIdMapper no longer works?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44445387/

相关文章:

java - 将 ArrayList 传递给方法以打印大小

c# - 获取数组子集,无需像 C 中的指针那样进行复制

c++ - 当元素是指针或引用时,连续内存 vector 没有优势吗?

java - Zookeeper curator缓存如何等待同步?

java - 字符串列表中的类对象列表

java - 尝试向另一个类中的 GUI 显示 HashMap 值

java - 来自未完全填充的字符数组的字符串

c# - updatepanel.update() 似乎没有从代码隐藏中触发

c# - MVC JsonResult 方法不接受参数

c# - C++ (Intel) vs Java (Hotspot) vs C# 基准问题(包括代码和结果)