Как я могу запустить несколько слушателей в Spring Boot Java? - PullRequest
1 голос
/ 16 января 2020

Я постоянно получаю фид данных от третьих лиц и хочу обработать около 100 тыс. Сообщений менее чем за минуту. Поэтому мы думаем реализовать очередь сообщений, через которую я могу разгрузить обрабатывающую часть и отправить sh сообщение в очередь, где один рабочий из 100 (или любое другое число) выбирает задание и обрабатывает его.

Я читал об обмене сообщениями на основе JMS и Redis, но я не уверен, как запустить несколько слушателей. Один слушатель уже настроен.

1 Ответ

1 голос
/ 16 января 2020

Spring JMS позволяет указывать пределы параллелизма с помощью строки "нижний верхний", например, "5-10", или простой строки верхнего предела, например, "10" (в этом случае нижний предел будет равен 1).

Контейнер слушателя всегда будет удерживать минимальное количество потребителей (setConcurrentConsumers (int)) и будет медленно масштабироваться до максимального числа потребителей

См .:

[1] https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jms/config/DefaultJmsListenerContainerFactory.html#setConcurrency - java .lang.String-

[2] https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jms/listener/DefaultMessageListenerContainer.html#setConcurrency - java .lang.String-

Пример компонента конфигурации загрузки Spring:

@Configuration
@EnableJms
public class AppConfig {

    @Bean
    public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
        DefaultJmsListenerContainerFactory factory 
          = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory());
        factory.setConcurrency("3-10");
        return factory;
    }
}
...