У меня есть исходящий шлюз JMS, который отправляет сообщения через очередь запросов и получает сообщения через очередь ответов. Я хотел бы знать, что является самым простым способом применения дросселирования к принимающей части сообщений из очереди ответов. Я попытался установить Poller
в исходящий шлюз, но, когда я его установил, ответные сообщения вообще не потребляются. Можно ли использовать Poller
в исходящих шлюзах для дросселирования потребления сообщений? Если да, то как? Если нет, как я могу лучше всего использовать потребление ответа на сообщение?JMS Исходящий ответ отклика на ввод ответа
Мой стек:
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
Рассмотрев поток SI в целом, и в значительной степени в соответствии с тем, что вы говорите ... оказывается, на самом деле нам вообще не нужно дросселировать на JMS Outbound Gateway. Вместо этого мы теперь дросселируем начальный JMS Inbound Adapter в начале всего потока с помощью установки Poller, а также ThreadPoolExecutor (не показано в фрагменте кода выше!). Я полагаю, это синонимом того, что вы имели в виду, чтобы установить Poller на входном канале. Спасибо за удобный совет! –
Исправить. Потому что 'inbound-channel-adapter' тоже' pollable'. См. 'AbstractPollingEndpoint' и его реализации. Они требуют «poller». –