当前位置: 首页 > 知识库问答 >
问题:

Apache Ignite2.0 Java和.NET:BasicBinaryIdMapper不再工作?

郑高驰
2023-03-14

我的目标是运行一个Java Ignite节点,并连接一个。NET客户机。由于我遇到了一些问题,我使用了一个更简单的例子,不是服务器/客户机模型,而是服务器/服务器模型。在Ignite2.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.binaryBasicIDMapper,compactFooter=true,globserializer=null},rmtBinaryCFG={true,GlobSerializer=null}]

您将注意到,在上面的异常中,Java节点具有BinaryBasicIdMapper设置,然而remote.NET节点不再具有此映射器,这导致了此异常。

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

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

我一直在搜索Ignite文档,试图找出在Ignite2.0中要做什么,但我找不到任何要做什么的例子。还有人面临过这个问题吗?你是怎么解决的?

共有1个答案

董光霁
2023-03-14

在Ignite 2.0+中连接Java和.NET节点并相互映射类型:

  • BinaryBasicNameMapperSimpleName同时使用
  • 不设置IDMapper
  • ignite.binary().type(Foo.class)(Java)和ignite.getbinary().getbinarytype(typeof(Foo))(.net)
  • 注册两边的类型

详情:

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

我已经更新了有问题的博客文章,并为Ignite-2.0分支添加了工作示例

 类似资料:
  • 我有一个奇怪的问题,每天我的AJAX请求一个网站不再工作。 我现在正在努力使它工作,但找不到问题。 这是我的JavaScript:基本上它非常简单,它检索ip adres并将其发送到存储它的站点。 在服务器上,我现在添加了这一项,以避免使用通配符 当我只使用 头('access-control-allow-origin:');我得到错误:Cross-Origin-request blocked:C

  • 我正在与以下人员合作: MySQL:稳定5.6.22(瓶装) MysqlWorkbench 6.2 我有以下顺序 null 它又起作用了,只是玩,我试着再执行一次 确保返回1 原来的错误信息不会再次出现。 null MySQL服务器已停止并重新启动 工作台重新打开 计算机已重新启动 和返回1 不会再次出现原始错误消息。

  • 我有这样的配置 在包中,有一个组件需要中的存储库。 这适用于spring数据MongoDB 1.5.2版 如果我升级到任何高于1.6.0.release的版本(我尝试过1.6.2和1.7.0),这将不再有效。这就好像mongo存储库扫描不工作,我得到了错误: 有什么想法吗? 更新:如果我使用MongoRepository而不是PagingAndSortingRepository,它可以工作: 这不

  • 我发现,在2.4中引入了IgniteSpringBean的更改,将ignite实例的启动延迟到所有其他spring Bean初始化之后,可能已经中断了ignite SpringTransactionManager,导致无法将其配置为ignite事务的spring事务抽象。我真的,非常需要找到一个解决这个问题的方法。有人有什么想法/建议吗? 请参阅下面的堆栈跟踪, 谢谢

  • 问题内容: 问: 为什么不能在我的工作了吗? 我选择了一个相当强大的角度应用程序。我一直试图解决的最新问题是“页面刷新时丢失的用户凭据”问题。 当我拿起项目的auth服务时,并没有多大意义,在深入研究后,我发现它是从几页随机代码中组合而成的。它也不能完全正常工作,因此我研究了不同的来源,并决定完全实现其中之一(angular-client-side-auth) 现在,我实现的身份验证服务/控制器与

  • 我最近更新了我的自制Python 3.8安装。2至3.8。3.做完后,我跑了 以检查是否有任何更新。它更新了我从20.0安装的。2至20.1。1,并且自从我运行该命令以来,在我尝试使用它的任何时候都会抛出一个错误。以下是错误: 升级过程中似乎出现了一些问题,未能更改代码中的版本检查。我看到了类似的问题,但公认的答案对我来说并不适用。如何使再次可用?