在我的应用程序中,在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响应。
有人可以帮助我吗
答案 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