【问题标题】:How can I run multiple listeners in Spring Boot Java?如何在 Spring Boot Java 中运行多个侦听器?
【发布时间】:2020-01-16 17:53:48
【问题描述】:

我不断接收来自第三方的数据馈送,并希望在不到一分钟的时间内处理大约 10 万条消息。所以考虑实现一个消息队列,通过它我可以卸载处理部分并将消息推送到一个队列,100 个工作人员(或任何数量)中的一个工作人员选择并处理它。

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

【问题讨论】:

  • 您介意发布您已有配置的快照吗?

标签: java spring-boot rabbitmq jms spring-data-redis


【解决方案1】:

Spring JMS 允许您通过“lower-upper”字符串指定并发限制,例如“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;
    }
}

【讨论】:

  • 我们如何测试它?实际上有多个监听器正在运行..
  • 您作为妈妈使用的是什么?雷迪斯?使用带有管理仪表板的 ActiveMQ 之类的东西,您可以查看队列中的消费者数量。我确定有办法用 Redis 进行验证
猜你喜欢
  • 2021-03-02
  • 2021-09-05
  • 2015-11-13
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
相关资源
最近更新 更多