Add option for configuring max messages per task

See gh-42341
This commit is contained in:
Dmytro Nosan 2024-09-17 18:42:54 +03:00 committed by Stéphane Nicoll
parent e133ea3dfc
commit 09b57eff76
3 changed files with 17 additions and 1 deletions

View File

@ -135,6 +135,7 @@ public final class DefaultJmsListenerContainerFactoryConfigurer {
map.from(listenerProperties::isAutoStartup).to(factory::setAutoStartup); map.from(listenerProperties::isAutoStartup).to(factory::setAutoStartup);
map.from(listenerProperties::formatConcurrency).to(factory::setConcurrency); map.from(listenerProperties::formatConcurrency).to(factory::setConcurrency);
map.from(listenerProperties::getReceiveTimeout).as(Duration::toMillis).to(factory::setReceiveTimeout); map.from(listenerProperties::getReceiveTimeout).as(Duration::toMillis).to(factory::setReceiveTimeout);
map.from(listenerProperties::getMaxMessagesPerTask).to(factory::setMaxMessagesPerTask);
} }
} }

View File

@ -186,6 +186,11 @@ public class JmsProperties {
*/ */
private Duration receiveTimeout = Duration.ofSeconds(1); private Duration receiveTimeout = Duration.ofSeconds(1);
/**
* Specify the maximum number of messages to process in one task.
*/
private Integer maxMessagesPerTask;
private final Session session = new Session(); private final Session session = new Session();
public boolean isAutoStartup() { public boolean isAutoStartup() {
@ -250,6 +255,14 @@ public class JmsProperties {
this.receiveTimeout = receiveTimeout; this.receiveTimeout = receiveTimeout;
} }
public Integer getMaxMessagesPerTask() {
return this.maxMessagesPerTask;
}
public void setMaxMessagesPerTask(Integer maxMessagesPerTask) {
this.maxMessagesPerTask = maxMessagesPerTask;
}
public Session getSession() { public Session getSession() {
return this.session; return this.session;
} }

View File

@ -176,7 +176,8 @@ class JmsAutoConfigurationTests {
"spring.jms.listener.session.acknowledgeMode=client", "spring.jms.listener.session.acknowledgeMode=client",
"spring.jms.listener.session.transacted=false", "spring.jms.listener.minConcurrency=2", "spring.jms.listener.session.transacted=false", "spring.jms.listener.minConcurrency=2",
"spring.jms.listener.receiveTimeout=2s", "spring.jms.listener.maxConcurrency=10", "spring.jms.listener.receiveTimeout=2s", "spring.jms.listener.maxConcurrency=10",
"spring.jms.subscription-durable=true", "spring.jms.client-id=exampleId") "spring.jms.subscription-durable=true", "spring.jms.client-id=exampleId",
"spring.jms.listener.max-messages-per-task=10")
.run(this::testJmsListenerContainerFactoryWithCustomSettings); .run(this::testJmsListenerContainerFactoryWithCustomSettings);
} }
@ -188,6 +189,7 @@ class JmsAutoConfigurationTests {
assertThat(container.getConcurrentConsumers()).isEqualTo(2); assertThat(container.getConcurrentConsumers()).isEqualTo(2);
assertThat(container.getMaxConcurrentConsumers()).isEqualTo(10); assertThat(container.getMaxConcurrentConsumers()).isEqualTo(10);
assertThat(container).hasFieldOrPropertyWithValue("receiveTimeout", 2000L); assertThat(container).hasFieldOrPropertyWithValue("receiveTimeout", 2000L);
assertThat(container).hasFieldOrPropertyWithValue("maxMessagesPerTask", 10);
assertThat(container.isSubscriptionDurable()).isTrue(); assertThat(container.isSubscriptionDurable()).isTrue();
assertThat(container.getClientId()).isEqualTo("exampleId"); assertThat(container.getClientId()).isEqualTo("exampleId");
} }