springboot-rabbitmq

springboot-rabbitmq之工作队列(二)

2020-11-08  本文已影响0人  前进的码农

概念

老样子还是先上图


image.png

生产者p 把消息发送到队列其实是先发送到默认的路由,如果有多个消费者消费的话,消息会按照轮询的模式挨个的分发给消费者进行消费

代码

生产端

@Component
@Data
public class MyBean {
    private final AmqpAdmin amqpAdmin;
    private final AmqpTemplate amqpTemplate;

    @Autowired
    public MyBean(AmqpAdmin amqpAdmin, AmqpTemplate amqpTemplate) {
        this.amqpAdmin = amqpAdmin;
        this.amqpTemplate = amqpTemplate;
    }
    @Bean
    Queue queue(){
        return QueueBuilder.durable("hello").build();
    }

}

这里模拟发送10条消息

    @Autowired
    MyBean myBean;
    @Test
    void test(){
        for (int i = 0; i <10 ; i++) {
            myBean.getAmqpTemplate().convertAndSend("hello","queues:"+i);
        }

    }

代码和上个案列的差不多

消费端

这里模拟2个消费端,所以启动2个springboot 实列

@Component
@Slf4j
public class ReceiverBean {
    @RabbitListener(queues = "hello")
    public void processMessage(String msg) {
        log.info("i am consumer 01---"+msg);
    }
}

@Component
@Slf4j
public class ReceiverBean {
    @RabbitListener(queues = "hello")
    public void processMessage(String msg) {
        log.info("i am consumer msg---"+msg);
    }
}

结果

image.png image.png

每个消费者消费了5条消息,是不是很公平。

代码

生产者
https://gitee.com/ethanlab/rabbitmq/tree/master/rabbit-queues-producer
消费者
https://gitee.com/ethanlab/rabbitmq/tree/master/rabbit-queues-consumer
消费者
https://gitee.com/ethanlab/rabbitmq/tree/master/rabbit-queues-consumer-01

上一篇 下一篇

猜你喜欢

热点阅读