java - 1 消费者从不同的队列 RabbitMQ
问题描述
我有 3 个具有不同优先级的队列。我需要消费者从这些队列中读取。我在 RabbitMQ Web 界面上声明并配置了队列的优先级。我使用x-maximum-priority
参数来设置不同的值(https://www.rabbitmq.com/priority.html)。
这是代码:
public static void main( String[] args ) throws IOException, TimeoutException, InterruptedException
{
....
//Conection details
System.out.println(" [x] Waiting ");
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
AMQP.BasicProperties replyProps = new AMQP.BasicProperties
.Builder()
.correlationId(properties.getCorrelationId())
.build();
String message = new String(body,"UTF-8");
System.out.println(message);
Thread.sleep(2000);//To simulate a big operation
channel.basicAck(envelope.getDeliveryTag(), false);
};
channel.basicConsume("high_priority", false, consumer);
channel.basicConsume("medium_priority", false, consumer);
channel.basicConsume("low_priority", false ,consumer);
}
但是消费者从第一个队列中获取,当为空时从第二个队列中获取,当为空时从第三个队列中获取。
这是一个不好的方法吗?使用3个消费者更好吗?可以与消费者优先事项一起使用吗?(https://www.rabbitmq.com/consumer-priority.html)
更新:
我希望消费者以不同的顺序接收消息。我希望消费者从高优先级队列中获取,偶尔根据优先级从其他队列中获取。我需要以交织的方式消费所有消息。我不希望低优先级消息永远不会被消耗,因为高优先级消息总是超过。
例子:
我有 3 个队列:高优先级、中优先级、低优先级,例如,我希望消费者从高优先级队列中获取 10 条消息,从中优先级队列中获取 4 条消息,从低优先级队列中获取 1 条消息。
解决方案
推荐阅读
- java - 我想按顺序打印薪水最后一个称为安排的函数必须完成这项工作,而不是代码正在工作
- reactjs - 使用带有 React-Scripts 版本 3.4.1 的 Create React App 代理多个 API 请求
- python - 网页抓取:花费大量时间
- java - Rhapsody (windows 7 version) for java , java 示例项目编译,但运行立即关闭程序
- python - selenium instagram bot - 获取帖子作者的用户名
- javascript - 添加mailto后网站现在“不安全”?
- java - 我需要在我的转置 Java 程序中使用 double() 并使用扫描仪
- embedded - VxWorks:为什么无法更改引导线?
- css - How can I get the facebook customer chat svg?
- components - 如何让参数不仅显示在组件中,而且在 OnInitializedAsync() 中被识别?