代码之家  ›  专栏  ›  技术社区  ›  Matwfo

Spring Factory创建同步消费者,倾听队列

  •  1
  • Matwfo  · 技术社区  · 8 年前

    我想创建一个spring引导应用程序,它启动一个工厂类,该类将创建并启动10个同步客户端。这些客户端必须不断地监听队列。下面是我的代码。我不确定,如果我在正确的轨道上,需要一些帮助。我的实现正确吗?如何确保创建了10个同步客户端?如何使用标识符来标识哪个消息客户端处理了该消息?

    Application.java

    @SpringBootApplication
    public class Application {
    
        @Bean
        public MesFactory mesFactory(){
            return new MesFactory();
        }
    
        public static void main(String... args) {
            SpringApplication.run(Application.class, args);
        }
    }
    
    public class MesFactory {
    
        private ExecutorService executorService = 
    
        Executors.newFixedThreadPool(10);
    
        @PostConstruct
        public void build(){
            executorService.execute(() -> new MesClient());
        }
    }
    
    
    @Component
    @EnableJms
    public class MesClient {
    
        private static final Log log = LogFactory.getLog(MesClient.class);
    
        @Autowired
        private JmsTemplate jmsTemplate;
    
        @JmsListener(destination = "incoming-messages-queue")
        public void receive(String message) {
            System.out.println("Received <" + message + ">");
            doPerformMessage(message);
        }
    
        public void doPerformMessage(String message){
           // parsing happens here
        } 
    
        @Bean
        ConnectionFactory connectionFactory() {
            return new RMQConnectionFactory();
        }
    
        @Scheduled(fixedRate = 100000000L)
        public void sendMessage() {
    
            String message= "Hi World";
    
            // Coerce a javax.jms.MessageCreator
            MessageCreator messageCreator = (Session session) -> {
                return session.createTextMessage(message);
            };
    
            // And publish to RabbitMQ using Spring's JmsTemplate
            jmsTemplate.send("incoming-messages-queue", messageCreator);
        }
    
    }
    
    1 回复  |  直到 8 年前
        1
  •  3
  •   Gary Russell    8 年前

    设置引导属性。。。

    spring.jms.listener.concurrency=10
    spring.jms.listener.max-concurrency=10
    

    Spring Boot documentation - Application Properties 然后向下滚动到JMS部分。