- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 spring integration v2.2.6.RELEASE 运行这个 ( https://github.com/cloudfoundry-samples/wgrus/tree/master/spring-integration ) wgrus 示例应用程序并不断收到 MessageTransformationException。该应用程序分为 3 个组件 - 商店 UI、库存服务和运输服务(此服务与此处无关)并使用 AMQP 协议(protocol)将消息发送到 RabbitMQ。简而言之,您在 UI 中输入订单详细信息,然后以消息的形式将其发送到订单 channel 。在后台,应用程序执行声明检查,将消息存储在 Mongo 中(我可以看到它已存储)并返回一条新消息,其有效负载是存储消息的 ID - 到目前为止一切顺利,消息已存储我可以看到 amqpOut channel 返回存储消息的 ID,即 826bcbfb-21fa-424d-aecd-0bab3d1a690b - 这可以在我的问题底部显示的调试中看到。接下来,消息通过出站 AMQP channel 发送到 RabbitMQ,并且应该由库存服务拾取,此时抛出异常。我可以看到,在调试打印 Payload=???sr?java.util.UUID????m?/
有没有人遇到过这个问题并且知道如何解决它?
商店 UI 使用的配置:
<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>
...
调试:
DEBUG: http-bio-8080-exec-3 org.springframework.integration.channel.DirectChannel - postSend (sent=true) on channel 'amqpOut', message: [Payload=826bcbfb-21fa-424d-aecd-0bab3d1a690b][Headers={timestamp=1384617973920, id=e98cd0c1-bd8c-4786-be31-1e77b0200934, content-type=text/x-json}]
DEBUG: http-bio-8080-exec-3 org.springframework.integration.channel.DirectChannel - postSend (sent=true) on channel 'jsonOrders', message: [Payload={"id":1,"approved":false,"reserved":false,"customerId":"","quantity":1,"productId":"widget"}][Headers={timestamp=1384617973852, id=826bcbfb-21fa-424d-aecd-0bab3d1a690b, content-type=text/x-json}]
DEBUG: http-bio-8080-exec-3 org.springframework.integration.channel.DirectChannel - postSend (sent=true) on channel 'orderChannel', message: [Payload=Order #1: 1 widgets for ][Headers={timestamp=1384617973824, id=1b700a4b-35e1-4d16-8ca0-7cd20ccfb85e}]
DEBUG: SimpleAsyncTaskExecutor-1 org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper - headerName=[content-type] WILL be mapped, matched pattern=content-type
DEBUG: SimpleAsyncTaskExecutor-1 org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper - headerName=[amqp_receivedRoutingKey] WILL be mapped, matched pattern=amqp_receivedRoutingKey
DEBUG: SimpleAsyncTaskExecutor-1 org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper - headerName=[amqp_deliveryMode] WILL be mapped, matched pattern=amqp_deliveryMode
DEBUG: SimpleAsyncTaskExecutor-1 org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper - headerName=[amqp_redelivered] WILL be mapped, matched pattern=amqp_redelivered
DEBUG: SimpleAsyncTaskExecutor-1 org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper - headerName=[amqp_deliveryTag] WILL be mapped, matched pattern=amqp_deliveryTag
DEBUG: SimpleAsyncTaskExecutor-1 org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper - headerName=[content-type] WILL be mapped, matched pattern=content-type
DEBUG: SimpleAsyncTaskExecutor-1 org.springframework.integration.channel.DirectChannel - preSend on channel 'orderChannel', message: [Payload=???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}]
DEBUG: SimpleAsyncTaskExecutor-1 org.springframework.integration.transformer.MessageTransformingHandler - org.springframework.integration.transformer.MessageTransformingHandler#1 received message: [Payload=???sr?java.util.UUID????m?/?J?
最佳答案
那么,您的问题就在这里:
<int:object-to-json-transformer input-channel="orderChannel" output-channel="jsonOrders" content-type="text/x-json"/>
你能解释一下设置content-type
的原因是什么吗? , 如果你在那之后使用 <claim-check-in>
,谁刚刚返回UUID
- 存储消息的 ID?
发生了什么事?
你的 UUID
由 SimpleMessageConverter
转换为序列化字节这个转换器集 contentType
作为application/x-java-serialized-object
到 MessageProperties
.但在那之后叫做AmqpHeaderMapper
,谁改变了contentType
用你的值(value)text/x-json
来自 MessageHeaders
.这对 Producer 来说很好。
但 Consumer 无法正确转换 Body,因为这里也有效 SimpleMessageConverter
默认。它会检查 contentType.startsWith("text")
.只需从序列化的字节 UUID
创建简单的字符串.
希望一切都清楚
更新
不幸的是<object-to-json-transformer>
套content-type
标题无论如何,到application/json
默认。
为了防止它,你应该像这样配置content-type=""
.
关于amqp - Spring 集成 MessageTransformationException 转换消息失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20021451/
在 Spring AMQP 项目中, 如果 messageProperties 没有 messageId,它们总是创建 messageId。 像这样.. if (this.createMessageI
我不确定我对 errorHandler 和 returnExceptions 的理解是否正确。 但这是我的目标:我从 App_A 发送了一条消息,使用 @RabbitListener 在 App_B
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我们希望将大型机放在总线上。我相信是AS400。为此,我想让 CICS 大型机向代理发送 AMQP 消息。有几十个AMQP客户端,包括JMS客户端。我对大型机上可能发生的事情了解不够,无法判断是否可以
我们希望将大型机放在公共(public)汽车上。我相信它是AS400。为此,我想让 CICS 大型机向代理发送 AMQP 消息。有几十个 AMQP 客户端,包括 JMS 客户端。我不太了解大型机上的可
我即将实现一个基于 PHP 的系统,该系统使用 RabbitMQ。我可以看出那里有 2 个成熟的库:PECL AMQP和 php-amqp . 我将同时为客户端和工作人员使用 PHP。 有人对这两个库
我正在使用 RabbitMQ 和 ruby-amqp与 Rails。当 Controller 收到消息时,我执行以下操作: def create AMQP.start("amqp://localh
我有两个困惑。 1.如果消息监听器抛出RuntimeException,SimpleMessageListenrContainer会停止吗?2.如果SimpleMessageListenerConta
我们在绑定(bind)到 Rabbit MQ 实例的 Java 应用程序的日志中遇到以下异常。 这是必须要注意的事情,表示Spring AMQP的实现中存在问题,还是可以忽略的事情?在后一种情况下,此
场景:微服务从 RabbitMQ 队列中获取消息,将其转换为对象,然后微服务对外部服务进行 REST 调用。 它将处理成千上万条这样的消息,如果我们知道外部 Rest 服务已关闭,有没有办法告诉我的消
我有一个使用带有 webflux 的 Boot 2.0 的应用程序,并且有一个端点返回 ServerSentEvent 的 Flux。这些事件是通过利用 spring-amqp 从 RabbitMQ
我正在尝试使用 streadway/amqp 连接到 RabbitMQ 总线Go 的驱动程序。我正在处理重新连接例程,为此,我有一个 rabbitMQConsume 函数调用 rabbitMQConn
我正在尝试通过 SSL 连接到 RabbitMQ。我遵循了此处链接的 RabbitMQ SSL 文档 https://www.rabbitmq.com/ssl.html根据 RabbitMQ SSL
这些 amqp 客户端库之间有什么区别?哪一个是最推荐的?主要区别是什么? 最佳答案 我会推荐 amqp.node和 bramqp通过 node-amqp。 node-amqp 有很多错误并且维护不善
我得到的错误: 2019-12-09 06:39:33.189 ERROR 107132 --- [http-nio-8082-exec-5] o.a.c.c.C.[.[.[/].[dispatche
所以我已经让 MQTT -> MQTT 和 AMQP -> AMQP 工作;不过,MQTT -> AMQP 的翻译似乎在某处不起作用。这是我的测试,如果我的“监听器”也在使用 paho 的 MQTT
我得到的错误: 2019-12-09 06:39:33.189 ERROR 107132 --- [http-nio-8082-exec-5] o.a.c.c.C.[.[.[/].[dispatche
几天前我问了同样的问题:Unable to "Peek" messages from an Azure Service Bus Queue using AMQP and Node 。我再次问同样的问题
我有一个当前与 RabbitMQ 集成的组件。我想将 RabbitMQ 替换为 Azure Event Hub,因为我们现在位于云中。 AMQP 0.9.1 与 AMQP 1.0 兼容吗?交换会无缝进
我有一个当前与 RabbitMQ 集成的组件。我想将 RabbitMQ 替换为 Azure Event Hub,因为我们现在位于云中。 AMQP 0.9.1 与 AMQP 1.0 兼容吗?交换会无缝进
我是一名优秀的程序员,十分优秀!