Spring Integration MessageTransformationException无法转换消息

开发者

我正在尝试运行此(https://github.com/cloudfoundry-samples/wgrus/tree/master/spring-integration)使用spring集成v2.2.6.RELEASE的wgrus示例应用程序,并继续获取MessageTransformationException。该应用程序分为3个部分-商店UI,库存服务和运输服务(此处与该服务无关),并使用AMQP协议将消息发送到RabbitMQ。简而言之,您可以在UI中输入订单详细信息,然后以消息的形式将其发送到订单渠道。在后台,应用程序执行索赔检查,将消息存储在Mongo中(我可以看到它已存储)并返回一条新消息,其有效负载是所存储消息的ID-到目前为止,该消息已存储我可以看到amqpOut通道返回已存储消息的ID,即826bcbfb-21fa-424d-aecd-0bab3d1a690b-这可以在问题底部显示的调试中看到。下一个,消息通过出站AMQP通道发送到RabbitMQ,并且应该由清单服务接收,这时将引发异常。我可以看到,在调试打印时,存储的消息的ID有时会发生一些变化Payload=???sr?java.util.UUID????m?/

有没有人遇到过这个问题,并且知道如何解决?

商店用户界面使用的配置:

<int:object-to-json-transformer input-channel="orderChannel" output-channel="jsonOrders" content-type="text/x-json"/>

<int:claim-check-in input-channel="jsonOrders" output-channel="amqpOut" message-store="messageStore"/>

<amqp:outbound-channel-adapter id="amqpOut" amqp-template="rabbitTemplate" routing-key="orders"/>
...

库存服务使用的配置:

<int:claim-check-out message-store="messageStore" input-channel="orderChannel" output-channel="inventoryChannel" remove-message="true" />

<amqp:inbound-channel-adapter channel="orderChannel"
  connection-factory="rabbitConnectionFactory"
  queue-names="orders"
  error-channel="errorLogger" />

<int:logging-channel-adapter id="errorLogger" log-full-message="true" level="INFO"/>

<int:chain input-channel="inventoryChannel" output-channel="amqpOut">
  <int:json-to-object-transformer type="org.wgrus.Order"/>
  <int:enricher request-channel="creditCheck">
    <int:property name="approved" expression="payload.startsWith('OK')"/>
  </int:enricher>
  <int:enricher request-channel="inventoryRouter">
    <int:property name="reserved" expression="payload"/>
  </int:enricher>
  <int:object-to-json-transformer content-type="text/x-json" />
  <int:claim-check-in/>
</int:chain>
...

调试:

调试:http-bio-8080-exec-3 org.springframework.integration.channel.DirectChannel-通道“ amqpOut”上的postSend(sent = true),消息:[Payload = 826bcbfb-21fa-424d-aecd-0bab3d1a690b] [标题= {timestamp = 1384617973920,id = e98cd0c1-bd8c-4786-be31-1e77b0200934,content-type = text / x-json}]]

调试:http-bio-8080-exec-3 org.springframework.integration.channel.DirectChannel-通道'jsonOrders'上的postSend(sent = true),消息:[有效载荷= {“ id”:1,“已批准”:false ,“ reserved”:false,“ customerId”:“”,“ quantity”:1,“ productId”:“ widget”}]] [Headers = {timestamp = 1384617973852,id = 826bcbfb-21fa-424d-aecd-0bab3d1a690b,content -type = text / x-json}]

调试:http-bio-8080-exec-3 org.springframework.integration.channel.DirectChannel-通道“ orderChannel”上的postSend(sent = true),消息:[有效载荷=订单#1:1个用于[[Headers = { timestamp = 1384617973824,id = 1b700a4b-35e1-4d16-8ca0-7cd20ccfb85e}]

调试:SimpleAsyncTaskExecutor-1 org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper-headerName = [content-type]将被映射,匹配的pattern = content-type

调试:SimpleAsyncTaskExecutor-1 org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper-headerName = [amqp_receivedRoutingKey]将被映射,匹配的模式= amqp_receivedRoutingKey

调试:SimpleAsyncTaskExecutor-1 org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper-headerName = [amqp_deliveryMode]将被映射,匹配的模式= amqp_deliveryMode

调试:SimpleAsyncTaskExecutor-1 org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper-headerName = [amqp_redelivered]将被映射,匹配的模式= amqp_redelivered

调试:SimpleAsyncTaskExecutor-1 org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper-headerName = [amqp_deliveryTag]将被映射,匹配的模式= amqp_deliveryTag

调试:SimpleAsyncTaskExecutor-1 org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper-headerName = [content-type]将被映射,匹配的pattern = content-type

调试:SimpleAsyncTaskExecutor-1 org.springframework.integration.channel.DirectChannel-在频道“ orderChannel”上预发送,消息:[有效载荷=?sr?java.util.UUID ?? m?/?J?leastSigBitsJ?mostSigBitsxp ??? = i?k ??!?] [Headers = {timestamp = 1384617974260,id = 81a2fb77-0f1e-4be7-9148-84da86a30ed8,content-type = text / x-json,amqp_receivedRoutingKey = orders,amqp_deliveryMode = PERSISTENT, amqp_redelivered = false,amqp_deliveryTag = 1}]]

调试:SimpleAsyncTaskExecutor-1 org.springframework.integration.transformer.MessageTransformingHandler-org.springframework.integration.transformer.MessageTransformingHandler#1收到消息:[Payload = ??? sr?java.util.UUID ???? m?/? ??

阿尔特姆·比兰(Artem Bilan)

好吧,您的问题在这里:

<int:object-to-json-transformer input-channel="orderChannel" output-channel="jsonOrders" content-type="text/x-json"/>

您能解释一下设置的原因是什么content-type,如果您在使用之后<claim-check-in>,谁又返回UUID存储的Message的ID?

发生什么事了?

UUID就是转换为通过序列化字节SimpleMessageConverter和该转换器设置contentTypeapplication/x-java-serialized-objectMessageProperties但在那之后叫AmqpHeaderMapper,谁改变了contentType你的价值text/x-jsonMessageHeaders对生产者来说很好。

但是Consumer无法正确转换Body,因为SimpleMessageConverter默认情况下,此处也可以正常工作并检查contentType.startsWith("text")只需从serialized的字节创建简单的String即可UUID

希望很清楚

更新

不幸的是,无论如何都<object-to-json-transformer>content-type标头设置application/json默认值。

为了防止这种情况,您应该像这样进行配置content-type=""

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring Integration MessageTransformationException无法转换消息

来自分类Dev

Spring Integration MongoDbStoringMessageHandler ClassCastException:无法将 BasicDBObject 转换为 BasicDBList

来自分类Dev

在Spring Integration中设置消息的生存时间

来自分类Dev

Spring Integration TCP不发送消息

来自分类Dev

Spring Integration:添加对实际消息的响应

来自分类Dev

Spring Integration以并发方式处理消息

来自分类Dev

无法识别 Spring Integration Http 导入

来自分类Dev

Spring Integration和Kafka:如何根据消息头过滤消息

来自分类Dev

Spring Integration Kafka适配器未产生消息

来自分类Dev

我应该如何在Spring Integration中构建我的消息?

来自分类Dev

Spring Integration通过TCP连接接收和发送消息

来自分类Dev

使用KafkaNativeOffsetManager时Spring Integration Kafka慢速消息处理

来自分类Dev

Spring Integration:如何一次处理多个消息?

来自分类Dev

没有更多消息时退出Spring Integration

来自分类Dev

使用Spring Integration接收消息时如何调用安全设置

来自分类Dev

使用KafkaNativeOffsetManager时Spring Integration Kafka慢速消息处理

来自分类Dev

Spring Integration消息重新交付最佳实践

来自分类Dev

Spring Integration JMS消息驱动的通道适配器失败

来自分类Dev

如果未执行,则spring-integration amqp拒绝消息

来自分类Dev

通过Spring Integration中的Rest响应过滤消息

来自分类Dev

使用Spring Integration发送成功的FTP文件上传消息

来自分类Dev

Spring Integration AMQP - 消息偶尔未确认,需要超时吗?

来自分类Dev

使用 Spring Integration 优化使用来自rabbitmq 的消息

来自分类Dev

设置消息优先级 Spring Integration DSL

来自分类Dev

在Spring Integration中将JSON转换为对象数组

来自分类Dev

Spring Integration CSV文件到POJO转换器

来自分类Dev

Spring Integration-MQTT类型转换器问题

来自分类Dev

Spring-Integration聚合器无法正常工作。

来自分类Dev

无法在Spring Integration中将订户附加到BroadCastingDispatcher

Related 相关文章

  1. 1

    Spring Integration MessageTransformationException无法转换消息

  2. 2

    Spring Integration MongoDbStoringMessageHandler ClassCastException:无法将 BasicDBObject 转换为 BasicDBList

  3. 3

    在Spring Integration中设置消息的生存时间

  4. 4

    Spring Integration TCP不发送消息

  5. 5

    Spring Integration:添加对实际消息的响应

  6. 6

    Spring Integration以并发方式处理消息

  7. 7

    无法识别 Spring Integration Http 导入

  8. 8

    Spring Integration和Kafka:如何根据消息头过滤消息

  9. 9

    Spring Integration Kafka适配器未产生消息

  10. 10

    我应该如何在Spring Integration中构建我的消息?

  11. 11

    Spring Integration通过TCP连接接收和发送消息

  12. 12

    使用KafkaNativeOffsetManager时Spring Integration Kafka慢速消息处理

  13. 13

    Spring Integration:如何一次处理多个消息?

  14. 14

    没有更多消息时退出Spring Integration

  15. 15

    使用Spring Integration接收消息时如何调用安全设置

  16. 16

    使用KafkaNativeOffsetManager时Spring Integration Kafka慢速消息处理

  17. 17

    Spring Integration消息重新交付最佳实践

  18. 18

    Spring Integration JMS消息驱动的通道适配器失败

  19. 19

    如果未执行,则spring-integration amqp拒绝消息

  20. 20

    通过Spring Integration中的Rest响应过滤消息

  21. 21

    使用Spring Integration发送成功的FTP文件上传消息

  22. 22

    Spring Integration AMQP - 消息偶尔未确认,需要超时吗?

  23. 23

    使用 Spring Integration 优化使用来自rabbitmq 的消息

  24. 24

    设置消息优先级 Spring Integration DSL

  25. 25

    在Spring Integration中将JSON转换为对象数组

  26. 26

    Spring Integration CSV文件到POJO转换器

  27. 27

    Spring Integration-MQTT类型转换器问题

  28. 28

    Spring-Integration聚合器无法正常工作。

  29. 29

    无法在Spring Integration中将订户附加到BroadCastingDispatcher

热门标签

归档