首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpRequestExecutingMessageHandler:没有输出通道或replyChannel头

HttpRequestExecutingMessageHandler:没有输出通道或replyChannel头
EN

Stack Overflow用户
提问于 2017-01-17 10:56:55
回答 1查看 1.2K关注 0票数 1

我在我的应用程序中收到一个错误,我没有得到解决方案。应用程序请求REST/JSON,并尝试与另一个应用程序合并。有一个轮询器异步调用每个请求。当一个do请求总是分派错误“没有输出通道或replyChannel头可用”并且它被重定向到errorChannel句柄。

代码语言:javascript
复制
...
@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata poller() {
    return Pollers              
            .fixedRate(NumberUtils.createLong(QUEUE_RATE))
            .get();
}

    @Bean
public MessageChannel errorChannel() {
    return MessageChannels.direct().get();
}

    @MessagingGateway 
public static interface HttpService {
    @Gateway(requestChannel = "service.input")
    void send(@Payload String body, @Headers MultiValueMap<String, String> headers);        
}


public MessageHandler httpOutboundAdapter(){
    HttpRequestExecutingMessageHandler handler = 
            Http.outboundGateway(URI, restTemplate)             
            .expectedResponseType(String.class)         
            .httpMethod(HttpMethod.POST)
            .mappedRequestHeaders("Authorization","Accept","Content-Type", "X-User-Email","X-User-Token")               
            .get();

    return handler;
}


@Bean
public FileWritingMessageHandler fileOutboundAdapter(){
    FileWritingMessageHandler fwmhs = Files
            .outboundAdapter(new File("logs/errors"))
            .autoCreateDirectory(true)
            .get();     

    return fwmhs;
}   

    @Bean
public IntegrationFlow send(){  
    return IntegrationFlows.from("service.input")
            .log(Level.DEBUG, "trace.http",
                    "'Request.\n'"+
                    ".concat('Headers : ').concat(headers.toString()).concat('\n')"+
                    ".concat('Payload : ').concat(payload.toString())"
                )                               
            .channel(MessageChannels.queue())
            .handle(this.httpOutboundAdapter()
            .transform(Transformers.toJson())
            .log(Level.DEBUG, "trace.http",
                    "'Response.\n'"+
                    ".concat('Headers : ').concat(headers.toString()).concat('\n')"+
                    ".concat('Payload : ').concat(payload.toString())"
                )
            .get();
}

    @Bean 
public IntegrationFlow errorFlow(){
    return IntegrationFlows.from(errorChannel())                                                                
                            .log(Level.DEBUG,"trace.http", "'Ocurred an error in httpResponse :'.concat(payload.message)")
                            .transform("payload.failedMessage")                             
                            .handle((p,h) -> 
                                        MessageBuilder.withPayload(new GenericMessage<>(p,h)))
                            .transform(Transformers.toJson())
                            .enrichHeaders(c -> c.headerExpression(FileHeaders.FILENAME, "'emailErrors-'.concat(headers.getTimestamp()).concat('.json')"))
                            .handle(fileOutboundAdapter())                              
                            .get();
}

日志打印:

在通道‘错误通道’上的org.springframework.messaging.core.DestinationResolutionException:(sent=true),消息: ErrorMessage ErrorMessage调度器未能传递消息;嵌套的例外是org.springframework.messaging.core.DestinationResolutionException:无输出通道或replyChannel报头可用,headers={id=826074c0-d1c6-4ecf-44f0-6da697b29f9c,timestamp=1484650523378}

在Gary摄入后的更新

..。

代码语言:javascript
复制
@Bean
public IntegrationFlow send(){  
    return IntegrationFlows.from("service.input")
            .log(Level.DEBUG, "trace.http",
                    "'Request.\n'"+
                    ".concat('Headers : ').concat(headers.toString()).concat('\n')"+
                    ".concat('Payload : ').concat(payload.toString())"
                )                               
            .channel(MessageChannels.queue())
            .handle(this.httpOutboundAdapter()
            .transform(Transformers.toJson())
            .log(Level.DEBUG, "trace.http",
                    "'Response.\n'"+
                    ".concat('Headers : ').concat(headers.toString()).concat('\n')"+
                    ".concat('Payload : ').concat(payload.toString())"
                )
            .channel("nullChanel")
            .get();
}

原木

2017-01-17 13:31.929调试19702 -ask调度器-9 o.s.integration.channel.DirectChannel : preSend on channel 'send.channel#3',消息: GenericMessage payload=$PAYLOAD_JSON,headers=$HEADERS 2017-01-17 : 13:58:31.930 DEBUG 19702 -ask调度器-9 o.s.i.t.MessageTransformingHandler : GenericMessage payload=$PAYLOAD_JSON,org.springframework.integration.handler.LoggingHandler#1 headers=$HEADERS 2017-01-17 13:58:31.932调试19702 -ask调度器-9 o.s.integration.channel.DirectChannel : preSend on channel 'send.channel#5',消息: GenericMessage payload=$PAYLOAD_JSON,headers=$HEADERS 2017-01-17 : 13:58:31.932调试19702 --ask调度程序-9 o.s.integration.handler.LoggingHandler : GenericMessage GenericMessage payload=$PAYLOAD_JSON,org.springframework.integration.handler.BridgeHandler#2 o.s.integration.handler.BridgeHandler : GenericMessage payload=$PAYLOAD_JSON,headers=$HEADERS 2017-01-17 13:31.943调试19702 --ask调度程序-9 o.s.integration.channel.DirectChannel : preSend频道'nullChanel',消息: GenericMessage payload=$PAYLOAD_JSON,payload=org.springframework.messaging.MessageDeliveryException:调度器: headers=$HEADERS 2017-01-17 13:58:31.944调试19702 -询问调度器-9 o.s.integration.channel.DirectChannel : preSend on channel 'errorChannel',消息: ErrorMessage Dispatcher没有订阅频道‘应用程序:29891.nullChanel’.嵌套的例外是org.springframework.integration.MessageDispatchingException:调度程序没有订户,headers={id=fe0672cd-b9e4-9d43-2c5a-3d2d0a1c5493,timestamp=1484668711944} 2017-01-17 13:58:31.945调试19702 -ask-调度程序-9 o.s.integration.handler.LoggingHandler : org.springframework.integration.handler.LoggingHandler#2接收消息: ErrorMessage payload=org.springframework.messaging.MessageDeliveryException: Dispatcher没有订阅通道‘应用程序:29891.nullChanel’.嵌套的例外是org.springframework.integration.MessageDispatchingException:调度程序没有订户,headers={id=fe0672cd-b9e4-9d43-2c5a-3d2d0a1c5493,timestamp=1484668711944} 2017-01-17 13:58:31.949调试19702 -ask-调度程序-9 o.s.i.t.MessageTransformingHandler : org.springframework.integration.transformer.MessageTransformingHandler#1接收消息: ErrorMessage payload=org.springframework.messaging.MessageDeliveryException: Dispatcher没有订阅通道‘应用程序:29891.nullChanel’.嵌套异常是org.springframework.integration.MessageDispatchingException:Dispatcher没有订户,headers={id=fe0672cd-b9e4-9d43-2c5a-3d2d0a1c5493,timestamp=1484668711944} 2017-01-17 13:58:31.951调试19702 -询问调度程序-9 o.s.integration.channel.DirectChannel : preSend on信道'errorFlow.channel#1',消息: GenericMessage payload=$PAYLOAD_JSON,headers=$HEADERS

我分别用$PAYLOAD_JSON和$HEADERS替换了有效负载和头,以减少日志。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-17 14:03:34

您的网关有一个void返回void send(...),因此框架不需要回复。

.log()元素是一个监听(这是第一个日志允许消息流到队列通道的方式)。

由于您的流以日志(wireTap)结束,因此它期待消息或回复通道的使用者。

我们可能会制作一个最终的.log终端,并将对其进行研究(INT-4210),但现在您可以在最后的.log之后添加.channel("nullChannel")

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41695292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档