日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMQ之队列优先级

發布時間:2024/4/11 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ之队列优先级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。


歡迎跳轉到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-analysis-of-priority/

優先級隊列,顧名思義,具有更高優先級的隊列具有較高的優先權,優先級高的消息具備優先被消費的特權。
本文主要講解如何使用RabbitMQ實現隊列優先級。

可以通過RabbitMQ管理界面配置隊列的優先級屬性,如下圖的x-max-priority.

也可以通過代碼去實現,比如:

Map<String,Object> args = new HashMap<String,Object>(); args.put("x-max-priority", 10); channel.queueDeclare("queue_priority", true, false, false, args);

配置了隊列優先級的屬性之后,可以在管理頁面看到Pri的標記:

上面配置的是一個隊列queue的最大優先級。之后要在發送的消息中設置消息本身的優先級,如下:

AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder(); builder.priority(5); AMQP.BasicProperties properties = builder.build(); channel.basicPublish("exchange_priority","rk_priority",properties,("messages").getBytes());

下面演示一段生產-消費的代碼。首先producer端先生產10個消息,第奇數個消息具備優先級,第偶數個消息就是默認的優先級(最低:0)。
生產端:

package com.vms.test.zzh.rabbitmq.priority;import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory;import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeoutException;/*** Created by hidden on 2017/2/14.*/ public class PriorityProducer {public static final String ip = "xx.xx.xx.73";public static final int port = 5672;public static final String username = "root";public static final String password = "root";public static void main(String[] arggs) throws IOException, TimeoutException {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setPassword(password);connectionFactory.setUsername(username);connectionFactory.setPort(port);connectionFactory.setHost(ip);Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();//create exchangechannel.exchangeDeclare("exchange_priority","direct",true);//create queue with priorityMap<String,Object> args = new HashMap<String,Object>();args.put("x-max-priority", 10);channel.queueDeclare("queue_priority", true, false, false, args);channel.queueBind("queue_priority", "exchange_priority", "rk_priority");//send message with priorityfor(int i=0;i<10;i++) {AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder();if(i%2!=0)builder.priority(5);AMQP.BasicProperties properties = builder.build();channel.basicPublish("exchange_priority","rk_priority",properties,("messages-"+i).getBytes());}channel.close();connection.close();} }

消費端:

package com.vms.test.zzh.rabbitmq.priority;import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.QueueingConsumer;import java.io.IOException; import java.util.concurrent.TimeoutException;/*** Created by hidden on 2017/2/14.*/ public class PriorityConsumer {public static final String ip = "xx.xx.xx.73";public static final int port = 5672;public static final String username = "root";public static final String password = "root";public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setPassword(password);connectionFactory.setUsername(username);connectionFactory.setPort(port);connectionFactory.setHost(ip);Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();QueueingConsumer consumer = new QueueingConsumer(channel);channel.basicConsume("queue_priority", false, consumer);while (true) {QueueingConsumer.Delivery delivery = consumer.nextDelivery();String msg = new String(delivery.getBody());System.out.println(msg);channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);}} }

消費端運行結果:

messages-1 messages-3 messages-5 messages-7 messages-9 messages-0 messages-2 messages-4 messages-6 messages-8

查看運行結果可以驗證優先級隊列的作用。

當然,在消費端速度大于生產端速度,且broker中沒有消息堆積的話,對發送的消息設置優先級也沒什么實際意義,因為發送端剛發送完一條消息就被消費端消費了,那么就相當于broker至多只有一條消息,那么對于單條消息來說優先級是沒有什么意義的。

歡迎跳轉到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-analysis-of-priority/


歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。


超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的RabbitMQ之队列优先级的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。