在RabbitMQ中,可以设置消息的优先级,也就相当于在队列中置顶某条消息,让某个消息优先得到处理的功能。

既然是设置消息的优先级,那么就是针对生产者,也就是消息发布端。

设置消息的优先级一共有2个步骤:

1、设置队列的x-max-priority参数;

2、设置消息的Priority参数。

话不多说,上代码!

发送端:

            var factory = new ConnectionFactory() { HostName = "localhost",UserName="ty2017",Password="",VirtualHost="log" };
using (var connection = factory.CreateConnection()) {
using (var channel = connection.CreateModel()) {
//声明一个队列,设置x-max-priority参数
channel.QueueDeclare("q.test", true, false, false, new Dictionary<string, object> { { "x-max-priority", } }); for (int i = ; i < ; i++) {
var body = Encoding.UTF8.GetBytes(string.Format("第{0}个消息",i+));
var properties = channel.CreateBasicProperties();
properties.SetPersistent(true);
//设置消息的优先级
properties.Priority = (byte)((i == )?:i);
//发布消息
channel.BasicPublish(exchange: "",
routingKey: "q.test",
basicProperties: properties,
body: body);
} }
}

将第四个消息的优先级设置为最大,我们打开Consumer端,看看第四个消息是否被优先处理!

Consumer端代码如下:

            var factory = new ConnectionFactory() { HostName = "localhost", UserName = "ty2017", Password = "",VirtualHost="log" };
using (var connection = factory.CreateConnection()) {
using (var channel = connection.CreateModel()) {
channel.QueueDeclare("q.test", true, false, false, new Dictionary<string, object> { { "x-max-priority", } }); channel.BasicQos(, , false); var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) => {
var body = ea.Body; var message = Encoding.UTF8.GetString(body);
Console.WriteLine("优先级:{0} 消息内容:{1}",ea.BasicProperties.Priority, message);
channel.BasicAck(ea.DeliveryTag, false); };
channel.BasicConsume(queue: "q.test",
noAck: false,
consumer: consumer);
Console.ReadLine();
}
}

运行Consumer端程序,得到如下结果:

根据结果可以看出,优先级越大的消息越是被优先处理!

RabbitMQ 设置消息的优先级的更多相关文章

  1. rabbitmq设置消息优先级、队列优先级配置

    1.首先在consume之前声明队列的时候,要加上x-max-priority属性,一般为0-255,大于255出错  -----配置队列优先级 配置成功后rabbitmq显示: 2.在向exchan ...

  2. RabbitMQ 设置消息的TTL(过期时间)

    我们在RabbitMQ中发布消息时,在代码中有两种方法设置某个队列的消息过期时间: 1.针对队列来说,可以使用x-message-ttl参数设置当前队列中所有消息的过期时间,即当前队列中所有的消息过期 ...

  3. SpringBoot整合Rabbitmq设置消息请求头

    String str = "{\"origin\":\"BBC\",\"origin_coupon_id\":51,\" ...

  4. 快速掌握RabbitMQ(三)——消息确认、持久化、优先级的C#实现

    1 消息确认 在一些场合,如转账.付费时每一条消息都必须保证成功的被处理.AMQP是金融级的消息队列协议,有很高的可靠性,这里介绍在使用RabbitMQ时怎么保证消息被成功处理的.消息确认可以分为两种 ...

  5. RabbitMQ与.net core(四) 消息的优先级 与 死信队列

    1.消息的优先级 假如现在有个需求,我们需要让一些优先级最高的通知推送到客户端,我们可以使用redis的sortedset,也可以使用我们今天要说的rabbit的消息优先级属性 Producer代码 ...

  6. rabbitmq设置队列消息存活时间

    public static final int ALIVETIME = 600000; public static final String QUEUE = "hnyz_gs_queue&q ...

  7. 四种途径提高RabbitMQ传输消息数据的可靠性(一)

    前言 RabbitMQ虽然有对队列及消息等的一些持久化设置,但其实光光只是这一个是不能够保障数据的可靠性的,下面我们提出这样的质疑: (1)RabbitMQ生产者是不知道自己发布的消息是否已经正确达到 ...

  8. RabbitMQ之消息持久化(转)

    原文地址 https://blog.csdn.net/u013256816/article/details/60875666/ 消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证 ...

  9. RabbitMQ之消息持久化

    消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢——消息持久化. 为了保证RabbitMQ在退出或者crash等异常情况下数据没有丢失,需要将queue,exch ...

随机推荐

  1. 第 6 章 存储 - 040 - docker managed volume

    docker managed volume 与 bind mount 在最大区别是不需要指定 mount 源,指明 mount point 就行了 通过 -v 告诉 docker 需要一个 data ...

  2. centos 7 安装TensorFlow

    查看linux版本 uname -a 查看磁盘大小 准备好python 2.7 查看python版本  import sysprint sys.version print sys.version_in ...

  3. [Spring] 04 Denpendency Injection

    DI Dependency Injection 依赖注入:从程序代码中移除依赖关系的一种设计模式. 这样就可以更容易地管理和测试应用程序. DI使我们的程序编码 loosely coupled.松耦合 ...

  4. JS实现悬浮导航的制作(附源码)--web前端

    思想:导航在这里只有两种状态,一种是初始状态.一种是固定布局状态.实现悬浮导航其实就是通过Javascript脚本语言控制导航的两种状态,主要是对两种状态成立条件的判断,明确了这些,实现起来就不会太难 ...

  5. p1470 Longest Prefix

    原本就想到dp,可是是我的思路是在串的各个位置都遍历一次set,看dp[i-st[k]]是否为1且前length(st[k])是st[k].这样200000*200*10会超时.更好的办法是在i位取前 ...

  6. C#方式操作Cookie

    1.设置cookie public static void SetCookie(string TokenValue) { HttpCookie tokencookie = new HttpCookie ...

  7. apiCloud 选择图片,选择视频,压缩图片

    选择视频或图片,只需要一个 UIMediaScanner 模板就可以实现,点击链接查看api https://docs.apicloud.com/Client-API/UI-Layout/UIMedi ...

  8. 23. Merge K Sorted Lists (Java, 归并排序的思路)

    题目:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...

  9. JComBox的用法

    JComboBox的使用: 类层次结构图:    java.lang.Object     --java.awt.Component      --java.awt.Container       - ...

  10. java之collection总结

    Collection 来源于Java.util包,是非常实用常用的数据结构!!!!!字面意思就是容器.具体的继承实现关系如下图,先整体有个印象,再依次介绍各个部分的方法,注意事项,以及应用场景.   ...