JMS出站网关响应读取限制

时间:2014-11-19 12:06:32

标签: spring-integration spring-jms

我有一个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

1 个答案:

答案 0 :(得分:1)

由于您要从response queue获取消息,.poller()对您没有帮助。

如果我们的端点poller(在您的情况下为input-channel)是test.request.ch,我们需要PollableChannel。请参阅有关此事的文档。

.replyContainer()上有Jms.outboundGateway个选项供您使用。有了它,您可以配置concurrentConsumers选项以在response queue上实现更好的吞吐量。

否则JmsOutboundGateway会为每条请求消息创建MessageConsumer