RabbitMQ工作队列配置问题

RabbitMQ工作队列配置问题,rabbitmq,message-queue,amqp,Rabbitmq,Message Queue,Amqp,关于RabbitMQ工作队列,我有两个问题: 从RabbitMQ教程中我了解到,如果我有一个基本的队列使用者客户端(只是一个基本的“Hello,World!”使用者),然后我为同一队列添加了第二个使用者客户端,那么RabbitMQ将以循环方式自动在这两个队列之间分派消息。这是真的吗(没有添加任何额外的配置) 使用(GetResponse response=channel.basicGet(“My_queue”,false),将我的客户机配置为一次只接收一条消息。由于我一次只接收一条消息,是否仍有

关于RabbitMQ工作队列,我有两个问题:

  • 从RabbitMQ教程中我了解到,如果我有一个基本的队列使用者客户端(只是一个基本的“Hello,World!”使用者),然后我为同一队列添加了第二个使用者客户端,那么RabbitMQ将以循环方式自动在这两个队列之间分派消息。这是真的吗(没有添加任何额外的配置)

  • 使用
    (GetResponse response=channel.basicGet(“My_queue”,false)
    ,将我的客户机配置为一次只接收一条消息。由于我一次只接收一条消息,是否仍有必要设置预取计数(
    channel.basickos(1)
    )以实现公平调度


  • 回答你的问题:

  • 没有
  • 但是,您的两个问题1和问题2不兼容。如果您使用的是消费者,则其设计目的是将消息推送到消费者,而您不使用
    Basic.Get
    。使用消费者时,您需要使用
    Basic.QoS
    来指定消费者只能“拥有”一次一条未确认的消息。RabbitMQ不会将其他消息推送到QoS限制之外

    您可以选择使用
    Basic.Get
    从队列中“拉”出来,这样您就可以控制自己的命运,一次运行多少条消息


    这有意义吗?

    有意义,我当时似乎是在“拉”客户机。工作队列模型是否仍然适用于“拉”客户机(循环调度)?我最初的意图是将消息推送到我的客户机,但是客户机被部署为Tomcat web应用程序,我发现有一段时间(真的){}loop不能很好地与Tomcat配合()。因此,我使用Java的ScheduledExecutorService每X毫秒运行一个客户端,这将只请求队列中的一条消息。我相信从队列中提取下一条消息的人将获得下一条消息。循环是不相关的,因为您没有调度任何内容。嗯,因此,在我当前的模型中,可能会有y“消费者”拉取的消息会比其他消息多吗?我这样问是因为听起来,在系统级将这些消费者作为Java客户端来实现可能比在Tomcat web应用程序上实现更为有利。如果不熟悉您的应用程序,很难说。但是,如果您使用的是拉取模型,那么一个进程比另一个进程多;要么它们都在满负荷运行,要么两者都处于空闲状态。我是一名工业工程师,学习过排队论,所以可能我对你的问题想得太多了……你有没有考虑过在Java应用程序中使用Apache Camel作为消费者和AMQP之间的薄层?而且,有消息听起来很奇怪在Tomcat中运行的使用者。本质上,Tomcat是一个允许您运行HTTP请求使用者的工具。如果您的消息不是在HTTP请求中到达的,则Tomcat可能具有不必要的复杂性。