Work Queues

Work Queues 模式的主要思想是避免因立即执行资源密集型任务而不得不等待它完成。在这个模式中,我们将任务封装为消息,并将其发送到队列。当有多个工作线程时,这些工作线程将一起处理这些任务。

publisher服务中发送消息,在1s内产生50条消息,发送到消息队列

consumer服务中定义两个消息消费者,监听work.queue队列。

消费者1每秒处理50条消息,消费者2每秒处理5条消息。

在默认情况下,RabbitMQ 会将消息依次轮询投递给绑定在队列上的每一个消费者,并不会考虑消费者是否已经处理完消息,因此会出现消息的堆积。

因此我们需要修改application.yml,设置prefetch的值为1,确保统一时刻最多投递给消费者1条消息。

spring:
  rabbitmq:
    addresses: localhost:5672  # RabbitMQ服务地址
    virtual-host: /            # RabbitMQ虚拟主机
    username: admin            # RabbitMQ用户名
    password: sdr@sdr_rabbitmq # RabbitMQ密码
    listener:
      simple:
        prefetch: 1 # 每次只接收一条消息,处理完后再接收下一条消息

最后更新于

这有帮助吗?