加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – postReceive on channel’outputChannel’,message为nul

发布时间:2020-12-15 02:14:56 所属栏目:Java 来源:网络整理
导读:我有一个 spring集成应用程序,它使用HttpRequestHandlingMessagingGateway接受json请求将它发送到变换器然后服务激活器,然后由PollableChannel接收消息并发回 但是我收到备用请求的响应,我正在跟踪模式运行应用程序记录器,如@GaryRussell在其他问题上建议并
我有一个 spring集成应用程序,它使用HttpRequestHandlingMessagingGateway接受json请求将它发送到变换器然后服务激活器,然后由PollableChannel接收消息并发回

但是我收到备用请求的响应,我正在跟踪模式运行应用程序记录器,如@GaryRussell在其他问题上建议并获得以下堆栈跟踪

从header-richher中删除output-channel时,我收到以下异常:

service activator . . .HolidaysAvailableResponse [holidayCodes=[HolidayCode [code=NEW-YEARS-DAY-ACTUAL,description=New Year's Day],HolidayCode [code=NEW-YEARS-DAY-OBSERVED,HolidayCode [code=DAY-AFTER-NEW-YEARS-DAY,description=Day After New Year's Day (QC)],HolidayCode [code=EPIPHANY,description=Epiphany],HolidayCode [code=QUEBEC-FLAG-DAY,description=Quebec Flag Day],HolidayCode [code=GROUNDHOG-DAY,description=Groundhog Day],HolidayCode [code=VALENTINES-DAY,description=Valentine's Day],HolidayCode [code=FLAG-DAY,description=Flag Day],HolidayCode [code=ISLANDER-DAY,description=Islander Day (PE)],HolidayCode [code=HERITAGE-DAY-YT,description=Heritage Day (YT)],HolidayCode [code=LOUIS-RIEL-DAY,description=Louis Riel Day (MB)],HolidayCode [code=FAMILY-DAY,description=Family Day (AB,ON,SK)],HolidayCode [code=ST-PATRICKS-DAY-ACTUAL,description=St. Patrick's Day],HolidayCode [code=ST-PATRICKS-DAY-OBSERVED,description=St. Patrick's Day (NL)],HolidayCode [code=COMMONWEALTH-DAY,description=Commonwealth Day],HolidayCode [code=EASTER-ACTUAL,description=Easter Sunday],HolidayCode [code=EASTER-OBSERVED,description=Easter Monday],HolidayCode [code=GOOD-FRIDAY,description=Good Friday],HolidayCode [code=SHROVE-TUESDAY,description=Shrove Tuesday (Pancake Day)],HolidayCode [code=ASH-WEDNESDAY,description=Ash Wednesday],HolidayCode [code=PALM-SUNDAY,description=Palm Sunday],HolidayCode [code=MAUNDY-THURSDAY,description=Maundy Thursday],HolidayCode [code=VIMY-RIDGE-DAY,description=Vimy Ridge Day],HolidayCode [code=VICTORIA-DAY,description=Victoria Day],HolidayCode [code=NATIONAL-PATRIOTES-DAY,description=National Patriotes Day (QC)],HolidayCode [code=NATIONAL-ABORIGINAL-DAY-ACTUAL,description=National Aboriginal Day (NT)],HolidayCode [code=NATIONAL-ABORIGINAL-DAY-OBSERVED,HolidayCode [code=NATIONAL-DAY-ACTUAL,description=National Day (QC)],HolidayCode [code=NATIONAL-DAY-OBSERVED,HolidayCode [code=CANADA-DAY-ACTUAL,description=Canada Day],HolidayCode [code=CANADA-DAY-OBSERVED,HolidayCode [code=NUNAVUT-DAY-ACTUAL,description=Nunavut Day],HolidayCode [code=NUNAVUT-DAY-OBSERVED,HolidayCode [code=BRITISH-COLUMBIA-DAY,description=British Columbia Day (BC)],HolidayCode [code=HERITAGE-DAY-AB,description=Heritage Day (AB)],HolidayCode [code=CIVIC-HOLIDAY,description=Civic Holiday (MB,NT,HolidayCode [code=NEW-BRUNSWICK-DAY,description=New Brunswick Day (NB)],HolidayCode [code=GOLD-CUP-PARADE-DAY,description=Gold Cup Parade (PE)],HolidayCode [code=LABOUR-DAY,description=Labour Day],HolidayCode [code=THANKSGIVING-DAY,description=Thanksgiving Day],HolidayCode [code=HALLOWEEN,description=Halloween],HolidayCode [code=REMEMBERANCE-DAY-ACTUAL,description=Rememberance Day],HolidayCode [code=REMEMBERANCE-DAY-OBSERVED,HolidayCode [code=CHRISTMAS-ACTUAL,description=Christmas],HolidayCode [code=CHRISTMAS-OBSERVED,HolidayCode [code=BOXING-DAY-ACTUAL,description=Boxing Day],HolidayCode [code=BOXING-DAY-OBSERVED,HolidayCode [code=NEW-YEARS-EVE,description=New Year's Eve]]]
DEBUG 2016-05-31 19:47:42,976 [http-bio-8088-exec-4] (AbstractMessageHandler.java:72) (handleMessage) - org.springframework.integration.transformer.MessageTransformingHandler#0 received message: GenericMessage [payload=HolidaysAvailableResponse [holidayCodes=[HolidayCode [code=NEW-YEARS-DAY-ACTUAL,description=New Year's Eve]]],headers={timestamp=1464704262960,id=b8e76d8a-97f7-c7a6-0c7a-a58d3c2ce440}]
DEBUG 2016-05-31 19:47:42,976 [http-bio-8088-exec-4] (MessagingGatewaySupport.java:365) (doSendAndReceive) - failure occurred in gateway sendAndReceive: ; nested exception is org.springframework.integration.dispatcher.AggregateMessageDeliveryException: All attempts to deliver Message to MessageHandlers failed.; nested exception is org.springframework.messaging.MessagingException: ; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available. Multiple causes:
    ; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
    ; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
See below for the stacktrace of the first cause.
DEBUG 2016-05-31 19:47:42,976 [http-bio-8088-exec-4] (AbstractHandlerExceptionResolver.java:134) (resolveException) - Resolving exception from handler [httpGatewayPost]: org.springframework.messaging.MessageHandlingException: ; nested exception is org.springframework.integration.dispatcher.AggregateMessageDeliveryException: All attempts to deliver Message to MessageHandlers failed.; nested exception is org.springframework.messaging.MessagingException: ; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available. Multiple causes:
    ; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
    ; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
See below for the stacktrace of the first cause.
DEBUG 2016-05-31 19:47:42,976 [http-bio-8088-exec-4] (AbstractHandlerExceptionResolver.java:134) (resolveException) - Resolving exception from handler [httpGatewayPost]: org.springframework.messaging.MessageHandlingException: ; nested exception is org.springframework.integration.dispatcher.AggregateMessageDeliveryException: All attempts to deliver Message to MessageHandlers failed.; nested exception is org.springframework.messaging.MessagingException: ; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available. Multiple causes:
    ; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
    ; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
See below for the stacktrace of the first cause.
TRACE 2016-05-31 19:47:42,976 [http-bio-8088-exec-4] (FrameworkServlet.java:1058) (resetContextHolders) - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@4106a123
DEBUG 2016-05-31 19:47:42,976 [http-bio-8088-exec-4] (FrameworkServlet.java:989) (processRequest) - Could not complete request
org.springframework.messaging.MessageHandlingException: ; nested exception is org.springframework.integration.dispatcher.AggregateMessageDeliveryException: All attempts to deliver Message to MessageHandlers failed.; nested exception is org.springframework.messaging.MessagingException: ; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available. Multiple causes:
    ; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
    ; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
See below for the stacktrace of the first cause.
    at org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:78)
    at org.springframework.integration.handler.ServiceActivatingHandler.handleRequestMessage(ServiceActivatingHandler.java:71)
    at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:99)
    at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78)
    at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)
    at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:101)
    at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:97)
    at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77)
    at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:277)
    at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115)
    at org.springframework.messaging.core.GenericMessagingTemplate.doSendAndReceive(GenericMessagingTemplate.java:150)
    at org.springframework.messaging.core.GenericMessagingTemplate.doSendAndReceive(GenericMessagingTemplate.java:45)
    at org.springframework.messaging.core.AbstractMessagingTemplate.sendAndReceive(AbstractMessagingTemplate.java:42)
    at org.springframework.integration.gateway.MessagingGatewaySupport.doSendAndReceive(MessagingGatewaySupport.java:357)
    at org.springframework.integration.gateway.MessagingGatewaySupport.sendAndReceiveMessage(MessagingGatewaySupport.java:328)
    at org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport.actualDoHandleRequest(HttpRequestHandlingEndpointSupport.java:492)
    at org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport.doHandleRequest(HttpRequestHandlingEndpointSupport.java:389)
    at org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway.handleRequest(HttpRequestHandlingMessagingGateway.java:103)
    at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)

解决方法

我不明白这是怎么回事:

DEBUG 2016-05-29 23:31:35,681 [http-bio-8080-exec-3] (AbstractMessageChannel.java:383) (postSend) - postSend (sent=true) on channel 'outputChannel',message: GenericMessage [payload=HolidaysAvailableResponse [holidayCodes=[HolidayCode [code=NEW-YEARS-DAY-ACTUAL. . .(POJO),headers={content-type=application/json,id=da43d6d2-2618-8581-4fcc-6aff7e79b6e1,timestamp=1464544895681}]
...
TRACE 2016-05-29 23:31:35,807 [http-bio-8080-exec-3] (AbstractMessageChannel.java:426) (postReceive) - postReceive on channel 'outputChannel',message is null

除非有另一个线程(不是日志记录)从outputChannel消耗或以某种方式有两个“outputChannel”bean – 这应该是不可能的.

也就是说,这段代码很奇怪……

@ServiceActivator(inputChannel = "requestChannel")
public Message<?> echo(Message<String> message)
{
    // log.info("request :: " + message.getPayload());

    jsonToObjectTransformerChannel.send(message);
    // inputChannel.send(message);

    Message<?> responseMessage = outputChannel.receive(100);

    System.out.println("final response recieved :: ");
    System.out.println(responseMessage);

    return responseMessage;
}

这并不是真的打算用这样的服务激活器发送和接收消息(尽管它不应该导致任何问题).

我有兴趣知道如果你摆脱outputChannel从中删除输出通道会发生什么

<header-enricher input-channel="headerEnricherChannel">
    <header name="content-type" value="application/json" />
</header-enricher>

并简单地将requestChannel连接到Json到对象转换器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读