Spring DefaultTuple不可序列化

时间:2016-01-14 13:08:34

标签: spring spring-integration spring-jdbc spring-xd

我正在使用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]

现在......好吧我被困住了,不知道如何继续。

任何提示都表示赞赏。

1 个答案:

答案 0 :(得分:0)

元组不是Serializable - 我不知道为什么 - 但是XD在内部使用Kryo进行序列化(默认情况下);您可以在聚合器之前/之后添加kryo transformers作为解决方法。

修改

另一种选择是使用Tuple上的--inputType=application/jsonaggregator转换为json。

请参阅type conversion

聚合器输出将是JSON字符串的集合,将它们返回到Tuple将取决于您在聚合器下游的操作。