RabbitMQ 入门(四)SpringAMQP五种消息类型

一、WorkQueue(工作消息队列)

Work queues,也被称为(Task queues),任务模型。简单来说就是让多个消费者绑定到一个队列,共同消费队列中的消息。

当消息处理比较耗时的时候,可能生产消息的速度会远远大于消息的消费速度。长此以往,消息就会堆积越来越多,无法及时处理。

此时就可以使用work 模型,多个消费者共同处理消息处理,速度就能大大提高了。

二、工作消息队列演示案例

演示案例:

基本思路如下:

1.在publisher服务中定义测试测试方法,每秒产生50条消息,发送到simple.queue

2.在consumer服务中定义两个消息监听者,都监听simple.queue队列

3.消费者1每秒处理50条消息,消费者2每秒处理10条消息

具体实现步骤:

步骤一:在publisher服务中添加一个测试方法,模拟大量消息 发送到simple.queue 循环50条消息

java 复制代码
/**
     * workQueue
     * 向队列中不停发送消息,模拟消息堆积。
     */
@Test
public void testWorkQueue() throws InterruptedException {
    // 队列名称
    String queueName = "simple.queue";
    // 消息
    String message = "hello, message_";
    for (int i = 0; i < 50; i++) {
        // 发送消息
        rabbitTemplate.convertAndSend(queueName, message + i);
        Thread.sleep(20);
    }
}

步骤二:编写两个消费者,都监听simple.queue

java 复制代码
@RabbitListener(queues = "simple.queue")
public void listenWorkQueue1(String msg) throws InterruptedException {
    System.out.println("消费者1接收到消息:【" + msg + "】" + LocalTime.now());
    Thread.sleep(20);
}

@RabbitListener(queues = "simple.queue")
public void listenWorkQueue2(String msg) throws InterruptedException {
    System.err.println("消费者2........接收到消息:【" + msg + "】" + LocalTime.now());
    Thread.sleep(200);
}

步骤三:测试

启动ConsumerApplication后,在执行publisher服务中刚刚编写的发送测试方法testWorkQueue。 可以看到消费者1很快完成了自己的25条消息。消费者2却在缓慢的处理自己的25条消息。也就是说消息是平均分配给每个消费者,并没有考虑到消费者的处理能力。

三)、消费预取限制,修改application.yml文件,设置preFetch这个值,可以控制预取消息的上限

XML 复制代码
spring:
  rabbitmq:
  host: 192.168.150.101  #主机名
  port:5672   #端口
  virtual-host :/ #虚拟主机
  username: rbmq   # 用户名
  password: 123456 # 密码
    listener:
      simple:
        prefetch: 1 # 每次只能获取一条消息,处理完成ACK之后,才能获取下一个消息

配置修改consumer 的application.yml文件之后,重新测试:

发现处理完成时间减少,并且消费者1消费处理了大量消息。

工作消息队列总结:多个消费者绑定到一个队列,同一条消息只会被一个消费者处理。通过设置prefetch来控制消费者预取的消息数量。

相关推荐
J_liaty2 小时前
RabbitMQ面试题终极指南
开发语言·后端·面试·rabbitmq
maozexijr5 小时前
RabbitMQ Exchange Headers类型存在的意义?
分布式·rabbitmq
独自破碎E6 小时前
RabbitMQ的消息确认机制是怎么工作的?
分布式·rabbitmq
maozexijr8 小时前
注解实现rabbitmq消费者和生产者
分布式·rabbitmq
Java 码农1 天前
RabbitMQ集群部署方案及配置指南09
分布式·rabbitmq
论迹1 天前
RabbitMQ
分布式·rabbitmq
Java 码农1 天前
RabbitMQ集群部署方案及配置指南08--电商业务延迟队列定制化方案
大数据·分布式·rabbitmq
Java 码农1 天前
Spring Boot集成RabbitMQ的各种队列使用案例
spring boot·rabbitmq·java-rabbitmq
vb2008111 天前
Ubuntu 系统下 RabbitMQ 作为 MQTT 代理的配置方案
mqtt·rabbitmq
win x1 天前
RabbitMQ快速上手
分布式·rabbitmq