有没有办法通过 Spring Boot 为队列动态设置 prefetchSize?
Is there a way to set prefetchSize for a queue dynamically with Spring Boot?
我的 app.properties
中有一个队列列表,如下所示:
queue.listener.names=queue0, queue1, queue2, queue3, queue4
queue.concurrency=1, 2, 3, 4, 5
queue.prefetchSize=1, 2, 3, 4, 5
我的任务是在 ActiveMQ 中使用 app.properties
的详细信息注册所有端点。
现在,我的代码是这样的:
@Configuration
@EnableJms
public class MyClass implements JmsListenerConfigurer {
@Value("${queue.listener.names}")
private List<String> listeners;
@Value("${queue.concurrency}")
private String[] concurr;
@Value("${queue.prefetchSize}")
private String[] prefetchSize;
@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
listeners.forEach(listener -> {
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
int index = listeners.indexOf(listener);
endpoint.setId(listener);
endpoint.setDestination(listener);
endpoint.setConcurrency(concurr[index]);
endpoint.setMessageListener(message -> {
// do something
});
registrar.registerEndpoint(endpoint);
});
}
}
问题是我找不到为每个队列设置预取大小的方法。当我通过代理 url.
时,我只是通过设置 prefetchSize
为所有队列获取它
如 the documentation 中所述,可以通过在目标上使用特殊语法在每个消费者的基础上配置预取大小,例如:
TEST.QUEUE?consumer.prefetchSize=10
所以在你的 app.properties
中你可以使用这样的东西:
queue.listener.names=queue0?consumer.prefetchSize=200, queue1?consumer.prefetchSize=100, queue2?consumer.prefetchSize=20, queue3?consumer.prefetchSize=10, queue4?consumer.prefetchSize=50
我的 app.properties
中有一个队列列表,如下所示:
queue.listener.names=queue0, queue1, queue2, queue3, queue4
queue.concurrency=1, 2, 3, 4, 5
queue.prefetchSize=1, 2, 3, 4, 5
我的任务是在 ActiveMQ 中使用 app.properties
的详细信息注册所有端点。
现在,我的代码是这样的:
@Configuration
@EnableJms
public class MyClass implements JmsListenerConfigurer {
@Value("${queue.listener.names}")
private List<String> listeners;
@Value("${queue.concurrency}")
private String[] concurr;
@Value("${queue.prefetchSize}")
private String[] prefetchSize;
@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
listeners.forEach(listener -> {
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
int index = listeners.indexOf(listener);
endpoint.setId(listener);
endpoint.setDestination(listener);
endpoint.setConcurrency(concurr[index]);
endpoint.setMessageListener(message -> {
// do something
});
registrar.registerEndpoint(endpoint);
});
}
}
问题是我找不到为每个队列设置预取大小的方法。当我通过代理 url.
时,我只是通过设置prefetchSize
为所有队列获取它
如 the documentation 中所述,可以通过在目标上使用特殊语法在每个消费者的基础上配置预取大小,例如:
TEST.QUEUE?consumer.prefetchSize=10
所以在你的 app.properties
中你可以使用这样的东西:
queue.listener.names=queue0?consumer.prefetchSize=200, queue1?consumer.prefetchSize=100, queue2?consumer.prefetchSize=20, queue3?consumer.prefetchSize=10, queue4?consumer.prefetchSize=50