【发布时间】:2017-07-31 23:32:47
【问题描述】:
我有一个带有弹簧集成的以下设置。
<int-http:inbound-gateway id="restListener"
request-channel="restChannel"
reply-channel="restResponseChannel"
path="/service"
supported-methods="POST"
reply-timeout="5000"
</int-http:inbound-gateway>
<int:channel id="restChannel"/>
<int:channel id="restResponseChannel"/>
<int:service-activator input-channel="restChannel"
ref="restRequestHandler"
method="handleRestRequest"/>
我在网关上收到 2 种不同类型的 POST 请求,它们都被传递给service-activator 进行处理。在一种类型的 POST 请求中,我的 service-activator 可以立即处理它并以标准响应回复。但是,其他类型的请求将通过不同的通道路由并由不同的处理器处理(取决于内容)。我希望处理这两种类型的请求的输出作为 REST 调用的response 发送。
对于第一种类型的请求,我可以简单地这样做
public void handleRestRequest(Message<JsonNode> postMessage) {
if (type1) {
// Do processing
restResponseChannel.send(MessageBuilder
.withPayload("{\"result\":\"success!\"}")
.copyHeaders(postMessage.getHeaders())
.build());
} else {
// send to another channel for further processing
}
}
但是对于第二种类型的请求,如果我尝试将send 输出到restResponseChannel(没有标题),那么我会遇到异常
org.springframework.messaging.core.DestinationResolutionException: 否 output-channel 或 replyChannel 标头可用
我无权访问第二种请求的原始标头。如何将输出发送到reply-channel? (我在某处读到网关创建了一个匿名通道来连接到reply-channel,并且没有这些标头会导致异常,但是我不完全了解底层机制来自己调试)
【问题讨论】:
标签: java spring spring-integration