Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Gemfire pdxInstance数据类型_Json_Rabbitmq_Spring Xd_Gemfire_Spring Data Gemfire - Fatal编程技术网

Json Gemfire pdxInstance数据类型

Json Gemfire pdxInstance数据类型,json,rabbitmq,spring-xd,gemfire,spring-data-gemfire,Json,Rabbitmq,Spring Xd,Gemfire,Spring Data Gemfire,我正在使用以下顺序向GemFire写入pdxInstances:rabbitmq=>springxd=>GemFire 如果我将此JSON放入rabbitmq{'ID':11,'value':5},value在GemFire中显示为字节值。如果我把{'ID':11,'value':500},值显示为一个单词,如果我把{'ID':11,'value':50000}显示为一个整数 当我从GemFire查询数据并对其排序时,会出现一个问题。例如,如果我使用一个查询,例如select*from/my_r

我正在使用以下顺序向GemFire写入
pdxInstance
s:
rabbitmq=>springxd=>GemFire

如果我将此JSON放入rabbitmq
{'ID':11,'value':5}
value
在GemFire中显示为字节值。如果我把
{'ID':11,'value':500}
显示为一个单词,如果我把
{'ID':11,'value':50000}
显示为一个整数

当我从GemFire查询数据并对其排序时,会出现一个问题。例如,如果我使用一个查询,例如
select*from/my_region order by value
,它将失败,表示无法将字节与单词(或字节与整数)进行比较


有没有办法在JSON中声明数据类型?或者任何其他方法来解决这个问题?

您最好使用自定义模块或groovy脚本来解决这个问题。您可以用Java编写一个自定义模块来进行转换,然后将自定义模块上载到SpringXD中,然后可以像任何其他处理器一样引用自定义模块。或者,您可以在Groovy中编写一个脚本,并通过转换处理器传递传入的数据

实际的转换可能不会太复杂,但会根据您使用的方法而有所不同。完成后,流的创建将类似于此

  • stream create--name myRabbitStream--definition“兔子|我的自定义模块| gemfire json服务器等…”

  • stream create--name myRabbitStream--definition“rabbit | transform--script=file:/transform.groovy | gemfire json服务器等…”


  • 看起来您的源模块和接收器模块都设置得很好,所以您需要做的就是让处理器模块设置来进行转换,您应该都设置好了

    要深入了解这个问题。。。在查看GemFire/Geode源代码时,似乎无法配置所需的值类型并覆盖GemFire/Geode的默认行为,如中所示

    我不会解释GemFire/Geode在Region.put(key,value)操作期间如何涉及JSONFormatter,因为它涉及的内容较多,超出了本文讨论的范围

    但是,有人可能会说问题不一定出在JSONFormatter类上,因为将数值存储在字节中比将值存储在整数中更有效,特别是当值确实适合于字节时。因此,问题实际上是查询处理器中使用的比较器应该能够比较相同类型族(byte、short、int、long)中的数值,并在适当的情况下进行上转换

    如果您愿意,可以在Apache Geode JIRA存储库中的

    注意,ApacheGeode现在是GemFire的开源“核心”。有关更多详细信息,请参阅

    干杯