Spring Factory 创建监听队列的同步消费者

问题描述 投票:0回答:1

我是 Spring Boot 和大学项目工作编码的新手,我需要一些帮助。 我想创建一个 Spring Boot 应用程序,它启动一个工厂类,该工厂类将创建并启动 10 个同步客户端。这些客户端必须不断监听队列。下面是我的代码。我不确定我是否走在正确的道路上并且需要一些帮助。我的实现正确吗?如何确保创建 10 个同步客户端?如何使用标识符来识别哪个消息客户端处理了该消息?

应用程序.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);
    }

}
java spring-boot spring-jms
1个回答
3
投票

设置启动属性...

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

监听器容器将启动 10 个线程 - 每个线程都从同一个队列消费;他们将调用 JMS 侦听器方法。

请参阅Spring Boot 文档 - 应用程序属性并向下滚动到 JMS 部分。

© www.soinside.com 2019 - 2024. All rights reserved.