Java 如何平衡出版商';使用RabbitMQ的请求?
假设您有多个生产者和一个消费者,希望从所有可用的发布者接收持久消息 制片人以不同的速度工作。假设系统A每秒生成10个请求,系统B每秒生成1个请求。因此,如果您使用唯一的队列,您将处理来自A的10条消息,然后是来自B的1条消息 但是,如果您想平衡负载并处理来自A的一条消息,然后是来自B的一条消息,等等,该怎么办。?从多个队列消费不是一个好的选择,因为在这种情况下我们不能使用通配符绑定 更新:Java 如何平衡出版商';使用RabbitMQ的请求?,java,rabbitmq,messaging,amqp,spring-rabbit,Java,Rabbitmq,Messaging,Amqp,Spring Rabbit,假设您有多个生产者和一个消费者,希望从所有可用的发布者接收持久消息 制片人以不同的速度工作。假设系统A每秒生成10个请求,系统B每秒生成1个请求。因此,如果您使用唯一的队列,您将处理来自A的10条消息,然后是来自B的1条消息 但是,如果您想平衡负载并处理来自A的一条消息,然后是来自B的一条消息,等等,该怎么办。?从多个队列消费不是一个好的选择,因为在这种情况下我们不能使用通配符绑定 更新: 按生产商排队似乎是最好的方法。制片人不知道他们不断变化的速度。每个消费者有一个队列,我可以订阅一个主题并从
按生产商排队似乎是最好的方法。制片人不知道他们不断变化的速度。每个消费者有一个队列,我可以订阅一个主题并从所有可用的发布者接收消息。但是每个生产者有一个队列,我需要自己编写逻辑:
另一个选择是根据生产速度创建3种类型的队列:<代码>高< /代码>,<代码>媒体< /代码>,<代码>低< /代码>。三个队列绑定到交换机,绑定密钥根据生产速度设置。这可以通过使用
消费者将使用循环策略使用这3个队列中的消息。有一点需要注意,生产商必须意识到他们的生产速度但最好的选择可能是每个生产者排队,特别是当生产者的速度不稳定且无法分类时。因此,制作人不需要知道他们的制作速度。我知道我参加晚会迟到了,但还是迟到了 在Azure服务总线术语中,它被称为“”,并且基于分区密钥。最好的部分是在Azure SB中,接收客户端不知道分区,它只是订阅单个队列 在RabbitMQ中有一个X一致性散列插件(“”),但不幸的是,它没有那么方便。消费者必须明确配置为从特定队列消费。如果您有十个队列,那么您需要设置您的消费者,以便覆盖所有十个队列 另外两个选择:
请记住,使用切分插件,即使它创建了“一个要使用的逻辑队列”,您也必须拥有与虚拟队列一样多的订阅者,否则一些队列将保持未使用状态。不清楚您所说的“不能使用通配符绑定”是什么意思-请澄清您的问题,并提供更多详细信息,说明为什么不可能有多个队列。