Java 更改RabbitMQ使用者权重

Java 更改RabbitMQ使用者权重,java,rabbitmq,load-balancing,Java,Rabbitmq,Load Balancing,据我在rabbitmq文档中看到的,排队的消息以循环方式发送给连接的消费者。但是,我希望我的一个消费者只接收,比方说1%的消息,用于试点测试 有可能做到这一点吗?任何想法都会有帮助 谢谢我想你在找我 RabbitMQ将比低优先级使用者更经常地向高优先级使用者发送消息。只有当高优先级耗电元件被阻塞时,它才会进入低优先级耗电元件。当消费者达到未确认消息的最大数量时,它将被阻止。这可以通过为消费者设置 消费者的优先级可通过以下方式设置: 将basic.consume方法中的x-priority参数设置

据我在rabbitmq文档中看到的,排队的消息以循环方式发送给连接的消费者。但是,我希望我的一个消费者只接收,比方说1%的消息,用于试点测试

有可能做到这一点吗?任何想法都会有帮助


谢谢

我想你在找我

RabbitMQ将比低优先级使用者更经常地向高优先级使用者发送消息。只有当高优先级耗电元件被阻塞时,它才会进入低优先级耗电元件。当消费者达到未确认消息的最大数量时,它将被阻止。这可以通过为消费者设置

消费者的优先级可通过以下方式设置:

basic.consume
方法中的
x-priority
参数设置为整数值。未指定值的使用者的优先级为0。数字越大表示优先级越高,可以使用正数和负数

因此,您可以为您的测试使用者和其他使用者定义优先级。 以下是RabbitMQ文档提供的示例

Channel channel = ...;
Consumer consumer = ...;
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-priority", 10);
channel.basicConsume("my-queue", false, args, consumer);
Channel=。。。;
消费者=。。。;
Map args=new HashMap();
参数put(“x优先级”,10);
channel.basicConsume(“我的队列”,false,args,consumer);

如果您希望严格控制消息在客户端之间的分布,您可能需要编写一个自定义插件来修改的行为。

为什么不创建第二个队列,绑定到相同的交换并部署您的测试目的消费者从那里消费呢?这样,您就不会影响您的业务正常消费者,您可以在第二个队列上进行任意多的测试。@JohanP不幸的是,我在这里提到的rabbitmq服务器不属于我们。它是一个远程队列,由其他公司管理。我们只需要准备消费者端。我想您可以做的是将预取设置为10,例如,在一个消费者上设置为10,在测试消费者上设置为1。也许让测试消费者睡眠x量,这样它肯定会比其他人消耗更少。所以没有办法达到我想要的,对吗?我已经看到了x优先级设置,但它不会改变rabbitmq分发排队消息的方式,除非更高优先级的使用者按预期工作。我想到的唯一方法是编写自定义插件。但这不是你的选择,因为服务器不属于你。我会像JohanP提到的那样,通过小规模的预回迁和睡眠呼叫来降低消费者的速度