我有一个JMS出站网关,它通过请求队列发送消息,并通过响应队列接收消息。我想知道将限制应用于响应队列中的消息接收部分的最简单方法是什么。我已经尝试将Poller
设置为出站网关,但是当我设置它时,响应消息根本就不被消耗。是否可以在出站网关中使用Poller
进行消息限制?如果是这样,怎么样?如果没有,我怎样才能最好地限制消息响应消耗呢?
我的筹码是:
o.s.i:spring-integration-java-dsl:1.0.0.RC1
o.s.i:spring-integration-jms:4.0.4.RELEASE
我的IntegrationgConfig.class:
@Configuration
@EnableIntegration
public class IntegrationConfig {
...
@Bean
public IntegrationFlow testFlow() {
return IntegrationFlows
.from("test.request.ch")
.handle(Jms.outboundGateway(connectionFactory)
.receiveTimeout(45000)
.requestDestination("REQUEST_QUEUE")
.replyDestination("RESPONSE_QUEUE")
.correlationKey("JMSCorrelationID"), e -> {
e.requiresReply(true);
e.poller(Pollers.fixedRate(1000).maxMessagesPerPoll(2)); // when this poller is set, response messages are not consumed at all...
})
.handle("testService",
"testMethod")
.channel("test.response.ch").get();
}
...
}
干杯, PM
答案 0 :(得分:1)
由于您要从response queue
获取消息,.poller()
对您没有帮助。
如果我们的端点poller
(在您的情况下为input-channel
)是test.request.ch
,我们需要PollableChannel
。请参阅有关此事的文档。
.replyContainer()
上有Jms.outboundGateway
个选项供您使用。有了它,您可以配置concurrentConsumers
选项以在response queue
上实现更好的吞吐量。
否则JmsOutboundGateway
会为每条请求消息创建MessageConsumer
。