我正在使用spring-xd 1.3.0版本来处理元组消息。
使用一些点击来丰富消息之后,我已经创建了自己的聚合器来重新组合生成的消息。
现在我想使用postgreSql消息存储,以便在崩溃节点时保持持久性。
所以我粗略地复制粘贴了原始spring-xd聚合器的原始this Q&A。
然后我构建并部署了以下流:
stream create aggregate --definition "queue:scoring > scoring-aggregator --store=jdbc --username=${spring.datasource.username} --password=${spring.datasource.password} --driverClassName=${spring.datasource.driverClassName} --url=${spring.datasource.url} --initializeDatabase=false > queue:endAggr"
但是当我将常用的元组消息发送到此流时,内存存储正确处理后,我得到:
xd_container_2 | Caused by: org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.io.NotSerializableException: org.springframework.xd.tuple.DefaultTuple
xd_container_2 | at org.springframework.core.serializer.support.SerializingConverter.convert(SerializingConverter.java:68) ~[spring-core-4.2.2.RELEASE.jar:4.2.2.RELEASE]
xd_container_2 | at org.springframework.integration.jdbc.JdbcMessageStore.addMessage(JdbcMessageStore.java:345) ~[spring-integration-jdbc-4.2.4.RELEASE.jar:na]
xd_container_2 | at org.springframework.integration.jdbc.JdbcMessageStore.addMessageToGroup(JdbcMessageStore.java:386) ~[spring-integration-jdbc-4.2.4.RELEASE.jar:na]
xd_container_2 | at org.springframework.integration.aggregator.AbstractCorrelatingMessageHandler.store(AbstractCorrelatingMessageHandler.java:604) ~[spring-integration-core-4.2.2.RELEASE.jar:na]
xd_container_2 | at org.springframework.integration.aggregator.AbstractCorrelatingMessageHandler.handleMessageInternal(AbstractCorrelatingMessageHandler.java:400) ~[spring-integration-core-4.2.2.RELEASE.jar:na]
xd_container_2 | at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) ~[spring-integration-core-4.2.2.RELEASE.jar:na]
现在......好吧我被困住了,不知道如何继续。
任何提示都表示赞赏。
答案 0 :(得分:0)
元组不是Serializable
- 我不知道为什么 - 但是XD在内部使用Kryo进行序列化(默认情况下);您可以在聚合器之前/之后添加kryo transformers作为解决方法。
修改强>
另一种选择是使用Tuple
上的--inputType=application/json
将aggregator
转换为json。
请参阅type conversion。
聚合器输出将是JSON字符串的集合,将它们返回到Tuple将取决于您在聚合器下游的操作。