Spring 集成序列化 MessageHeader 对象
Spring Integration serializes MessageHeader Object
我有一些服务,一种是用 Grails 2.4.2 (Spring 4.0.5) 实现的,一些是用 Spring Web (Spring 4.0.5) 实现的,另一种是用Spring 引导 1.2.1(Spring 4.1.4)。
这些服务通过 RabbitMQ 与 spring-integration.
进行通信
Grails 与 Spring Web 服务之间的通信正常,但无法与 Spring 引导服务通信。因为Spring Boot使用更新的Spring版本并且MessageHeaderclass的串行版本已经改变。
我该怎么做才能避免这个问题?
这里是例外:
原因:org.springframework.messaging.MessagingException:尝试转换和发送消息时 AMQP 侦听器发生故障。嵌套异常是 org.springframework.amqp.support.converter.MessageConversionException: 序列化转换失败
留言内容
在 org.springframework.integration.amqp.channel.AbstractSubscribableAmqpChannel$DispatchingMessageListener.onMessage(AbstractSubscribableAmqpChannel.java:201) ~[spring-integration-amqp-4.0.2.RELEASE.jar:na]
在 org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:693) ~[spring-rabbit-1.3.4.RELEASE.jar:na]
...省略了 10 个常见框架
Caused by: org.springframework.amqp.support.converter.MessageConversionException: 序列化消息内容转换失败
在 org.springframework.amqp.support.converter.SimpleMessageConverter.fromMessage(SimpleMessageConverter.java:112) ~[spring-amqp-1.3.4.RELEASE.jar:na]
在 org.springframework.integration.amqp.channel.AbstractSubscribableAmqpChannel$DispatchingMessageListener.onMessage(AbstractSubscribableAmqpChannel.java:176) ~[spring-integration-amqp-4.0.2.RELEASE.jar:na]
... 省略了 11 个常见框架
原因:java.lang.IllegalArgumentException:无法反序列化对象
在 org.springframework.amqp.utils.SerializationUtils.deserialize(SerializationUtils.java:79) ~[spring-amqp-1.3.4.RELEASE.jar:na]
在 org.springframework.amqp.support.converter.SimpleMessageConverter.fromMessage(SimpleMessageConverter.java:107) ~[spring-amqp-1.3.4.RELEASE.jar:na]
... 省略了 12 个公共框架
原因:java.io.InvalidClassException:org.springframework.messaging.MessageHeaders;本地 class 不兼容:流 classdesc serialVersionUID = -4615750558355702881,本地 class serialVersionUID = 7035068984263400920
在 java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:617) ~[na:1.7.0_51]
在 java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1622) ~[na:1.7.0_51]
在 java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517) ~[na:1.7.0_51]
在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771) ~[na:1.7.0_51]
在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) ~[na:1.7.0_51]
> 在 org.springframework.amqp.utils.SerializationUtils.deserialize(SerializationUtils.java:76) ~[spring-amqp-1.3.4.RELEASE.jar:na]
不要序列化整个Message<?>
;使用 AMQP 适配器将 Message
headers 映射到 amqp headers 和 vice-versa.
的能力
我不确定它在 grails 端是如何工作的,但你也需要在那里进行映射。
我有一些服务,一种是用 Grails 2.4.2 (Spring 4.0.5) 实现的,一些是用 Spring Web (Spring 4.0.5) 实现的,另一种是用Spring 引导 1.2.1(Spring 4.1.4)。
这些服务通过 RabbitMQ 与 spring-integration.
进行通信
Grails 与 Spring Web 服务之间的通信正常,但无法与 Spring 引导服务通信。因为Spring Boot使用更新的Spring版本并且MessageHeaderclass的串行版本已经改变。
我该怎么做才能避免这个问题?
这里是例外:
原因:org.springframework.messaging.MessagingException:尝试转换和发送消息时 AMQP 侦听器发生故障。嵌套异常是 org.springframework.amqp.support.converter.MessageConversionException: 序列化转换失败 留言内容 在 org.springframework.integration.amqp.channel.AbstractSubscribableAmqpChannel$DispatchingMessageListener.onMessage(AbstractSubscribableAmqpChannel.java:201) ~[spring-integration-amqp-4.0.2.RELEASE.jar:na] 在 org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:693) ~[spring-rabbit-1.3.4.RELEASE.jar:na] ...省略了 10 个常见框架 Caused by: org.springframework.amqp.support.converter.MessageConversionException: 序列化消息内容转换失败 在 org.springframework.amqp.support.converter.SimpleMessageConverter.fromMessage(SimpleMessageConverter.java:112) ~[spring-amqp-1.3.4.RELEASE.jar:na] 在 org.springframework.integration.amqp.channel.AbstractSubscribableAmqpChannel$DispatchingMessageListener.onMessage(AbstractSubscribableAmqpChannel.java:176) ~[spring-integration-amqp-4.0.2.RELEASE.jar:na] ... 省略了 11 个常见框架 原因:java.lang.IllegalArgumentException:无法反序列化对象 在 org.springframework.amqp.utils.SerializationUtils.deserialize(SerializationUtils.java:79) ~[spring-amqp-1.3.4.RELEASE.jar:na] 在 org.springframework.amqp.support.converter.SimpleMessageConverter.fromMessage(SimpleMessageConverter.java:107) ~[spring-amqp-1.3.4.RELEASE.jar:na] ... 省略了 12 个公共框架 原因:java.io.InvalidClassException:org.springframework.messaging.MessageHeaders;本地 class 不兼容:流 classdesc serialVersionUID = -4615750558355702881,本地 class serialVersionUID = 7035068984263400920 在 java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:617) ~[na:1.7.0_51] 在 java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1622) ~[na:1.7.0_51] 在 java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517) ~[na:1.7.0_51] 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771) ~[na:1.7.0_51] 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) ~[na:1.7.0_51] > 在 org.springframework.amqp.utils.SerializationUtils.deserialize(SerializationUtils.java:76) ~[spring-amqp-1.3.4.RELEASE.jar:na]
不要序列化整个Message<?>
;使用 AMQP 适配器将 Message
headers 映射到 amqp headers 和 vice-versa.
我不确定它在 grails 端是如何工作的,但你也需要在那里进行映射。