Spring Integration:使用@Gateway Interface实现时,Inbound Gateway的监听器无法正常工作

时间:2018-01-25 13:54:54

标签: spring-integration spring-jms

在我的应用程序中,在Spring JMS Integration Outbound Gateway的帮助下将消息发送到Tibco Queue。我们有配置文件来加载连接工厂以及服务器启动期间的所有信息。

但是当我们尝试从入站网关检索消息时,调用将进入GenericMessagingTemplate类的doReceive(),而不是从该方法返回。

以下是我们的应用程序的配置

网关类:

 @MessagingGateway 
 public Interface MessageGateway 
 {   
    @Gateway(requestChannel="InboundChannel")
    public Object listent(@Headers Map<String,Object> cusHeader, @Payload Object obj)
}

下面是配置和注册监听器类:

public Class Msgconfig {

   @Bean
   public MessageChannel InboundChannel(){
      return new DirectChannel();
   }

   @Bean
   @ServiceActivator(inputChannel ="InboundChannel")
   public AbstractMessageHandler listenMessage() {
      // having the logic of DefaultMessageListenerContainer class to load connection factory and setting the message listener
    // Have the logic of ChannelPublishingJmsMessageListener class to set the request channel
   }  
}

我有自定义入站类,它覆盖了实际用于处理消息的handleMessageInternal()方法。

我的客户端应用程序或测试调用将调用MessageGateway.listen,它必须返回没有返回任何内容的JMS响应。

有人可以帮助我吗

1 个答案:

答案 0 :(得分:1)

AbstractMessageHandler确实没有返回任何内容。它是单向组件。如果您想从下游返回一些内容,则必须使用request-reply组件。在Spring Integration中,所有这些都是AbstractReplyProducingMessageHandler的扩展。然而,完全不清楚为什么你应该这么低的水平 - 简单的POJO与方法返回任何网关呼叫是完全足够的。您仍然可以使用@ServiceActivator注释:https://docs.spring.io/spring-integration/docs/5.0.0.RELEASE/reference/html/configuration.html#annotations