在 onMessage 事件中,如果消息没有被转换为 Spring Integration 消息,它将尝试使用 MessageBuilder 来重建它。但它不包括标题。这似乎不正确。我们使用的是 Apache Artemis 1.2 和 Spring 4.2.5。
以下是有问题的代码SubscribableJmsChannel
:
public void onMessage(javax.jms.Message message) {
Message<?> messageToSend = null;
try {
Object converted = this.jmsTemplate.getMessageConverter().fromMessage(message);
if (converted != null) {
messageToSend = (converted instanceof Message<?>) ? (Message<?>) converted
: this.messageBuilderFactory.withPayload(converted).build();
this.dispatcher.dispatch(messageToSend);
}
else if (this.logger.isWarnEnabled()) {
logger.warn("MessageConverter returned null, no Message to dispatch");
}
}
有时我们看到消息被转换为 Spring 消息,有时它们被尝试从 Spring 消息有效负载转换(大约 20 次中的 1 次)。在这种情况下,下面的代码似乎尝试处理重新创建 Spring 消息信封 - 但它会丢弃标头。
有趣的是,我们的代码在负载测试中总是发送完全相同的消息。我还没有弄清楚为什么这些消息会以不同的方式收到。