有没有办法为使用 key-class 和 value-class 参数 Spring xd 中的Gemfire接收器? 关于文档,我只能使用 keyExpression ,但不能使用其类类型。密钥类也一样。
我对Gemfire有这样的命令,
put --key-class = java.lang.String --value-class = Employee --key = ('id': '998') --value = ('id': 186, 'firstName': 'James', 'lastName': 'Goslinga') --region = replicated2

所以我在Gemfire中使用 - key-class 和 - value-class 参数。 但我不能在Spring xd中使用它们,因为 Gemfire Sink 中只有 keyExpression 参数。
有什么想法要解决?
答案 0 :(得分:0)
据我所知,本机GemFire不支持上述语法。所以你不能用Spring XD开箱即用。语法看起来像SQL一样模糊。你在使用Gemfire XD吗?这是你自己写的吗?
gemfire接收器使用spring-integration-gemfire,允许您使用SpEL声明keyExpression。使用gemfire接收器的值始终是有效负载。 SI gemfire出站适配器包装Region.put(键,值)。 GemFire API支持通过泛型键入,即区域<K,V>
,但在这种情况下不会强制执行。 GemFire RegionFactory允许keyConstraint和valueConstraint属性约束类型,但这是Spring XD外部的Region配置的一部分。此外,这些都没有解决您示例中的数据绑定,例如
Person p = ('id': 186, 'firstName': 'James', 'lastName': 'Goslinga')
此功能需要自定义接收器模块。如果您的命令可以作为shell脚本执行,那么您可以使用shell
接收器来调用它。
答案 1 :(得分:0)
感谢您的回答,
也许基本上我可以用这种方式解释我的问题。
如果我将以下命令写入gemfire控制台,我可以在包含Employee类对象的区域中创建新条目。
put --key-class=java.lang.String --value-class=Employee --key=('id':'998') --value=('id':186,'firstName':'James','lastName':'Goslinga') --region=replicated2
我想要做的是我将从spring-xd发送数据。我将在Gemfire中有一个Employee类的新对象。
如果我创建这样的流,它将从兔子MQ获取数据并将其发送到gemfire。
stream create --name reference-data-import --definition "rabbit --outputType=text/plain | gemfire-json-server --host=MC0WJ1BC --regionName=region10 --keyExpression=payload.getField('id')" --deploy
我可以在这种类型的“com.gemstone.gemfire.pdx.internal.PdxInstanceImpl”中看到这些数据。
关于spring-xd文档我可以使用这样的参数outputType = application / x-java-object; type = com.bar.Foo但是我从来没有设法解决它,即使我部署了我的类。 如果我能看到一个简单的工作实例,那对我来说就很棒。