rabbitmq學習3-springboot和工作隊列

如圖,可以用看到,工作隊列有多個消費者

一、工作隊列配置

@Configuration
public class WorkMqConfig {
    private final static String workQunne = "workMq";

    @Bean
    public Queue workMq() {
        return new Queue(workQunne);
    }
}

二、生產者

@Controller
@RequestMapping("workMq")
public class WorkProducer {

    private Logger logger= LoggerFactory.getLogger(WorkProducer.class);


    @Autowired
    private AmqpTemplate rabbitTemplate;

    @RequestMapping("/sendMessage")
    public void send() {
        for (int i=0;i<10;i++){
            this.rabbitTemplate.convertAndSend("workMq", i);
        }
    }
}

三、消費者

消費者1:

@Component
public class WorkCustomer {

    private Logger logger= LoggerFactory.getLogger(WorkCustomer.class);

    @RabbitListener(queues="workMq")
    public void processA(int msg) {
        logger.info("ReceiveA:"+msg);
    }

}

消費者2:

@Component
public class WorkCustomer2 {

    private Logger logger= LoggerFactory.getLogger(WorkCustomer2.class);

    @RabbitListener(queues="workMq")
    public void processA(int i) {
        logger.info("ReceiveB:"+i);
    }
}

測試:

利用postman調用接口,發送消息,執行結果如下:

可以看到,隊列中的消息發送到兩個消費者是一個輪詢的效果

如果希望不希望輪詢的效果,而是根據兩個消費者消費消息的能力來消費消息呢?比如A能更快地消費消息,則將更多的消息給A 

代碼:

修改WorkCustomer2代碼爲如下:

@Component
public class WorkCustomer2 {

    private Logger logger= LoggerFactory.getLogger(WorkCustomer2.class);

    @RabbitListener(queues="workMq")
    public void processA(int i)  throws InterruptedException{
        Thread.sleep(3000);
        logger.info("ReceiveB:"+i);
    }
}

修改mq配置:

@Bean
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,
                                                                               ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setPrefetchCount(1);
        configurer.configure(factory, connectionFactory);
//        factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);             //開啓手動 ack
        return factory;
    }

測試:

源碼地址:

鏈接:https://pan.baidu.com/s/1K2L-Gxng9i5D9dTv2WPGlA 
提取碼:xhyx 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章