我不断收到来自第三方的数据提要,并希望在不到一分钟的时间内处理大约10万条消息。因此,我考虑实现一个消息传递队列,通过该消息传递队列,我可以分担处理部分的工作,并将消息推送到队列中,在该队列中,每100名工人(或任何数量)中的一名工人选择该作业并进行处理。

我已经阅读了有关基于JMS和Redis的消息传递的信息,但是我不确定如何运行多个侦听器。单个侦听器已配置。

最佳答案

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启动配置Bean中的示例:

@Configuration
@EnableJms
public class AppConfig {

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

10-07 19:31
查看更多