RabbitMQ 设置消息的优先级
在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 设置消息的优先级的更多相关文章
- rabbitmq设置消息优先级、队列优先级配置
1.首先在consume之前声明队列的时候,要加上x-max-priority属性,一般为0-255,大于255出错 -----配置队列优先级 配置成功后rabbitmq显示: 2.在向exchan ...
- RabbitMQ 设置消息的TTL(过期时间)
我们在RabbitMQ中发布消息时,在代码中有两种方法设置某个队列的消息过期时间: 1.针对队列来说,可以使用x-message-ttl参数设置当前队列中所有消息的过期时间,即当前队列中所有的消息过期 ...
- SpringBoot整合Rabbitmq设置消息请求头
String str = "{\"origin\":\"BBC\",\"origin_coupon_id\":51,\" ...
- 快速掌握RabbitMQ(三)——消息确认、持久化、优先级的C#实现
1 消息确认 在一些场合,如转账.付费时每一条消息都必须保证成功的被处理.AMQP是金融级的消息队列协议,有很高的可靠性,这里介绍在使用RabbitMQ时怎么保证消息被成功处理的.消息确认可以分为两种 ...
- RabbitMQ与.net core(四) 消息的优先级 与 死信队列
1.消息的优先级 假如现在有个需求,我们需要让一些优先级最高的通知推送到客户端,我们可以使用redis的sortedset,也可以使用我们今天要说的rabbit的消息优先级属性 Producer代码 ...
- rabbitmq设置队列消息存活时间
public static final int ALIVETIME = 600000; public static final String QUEUE = "hnyz_gs_queue&q ...
- 四种途径提高RabbitMQ传输消息数据的可靠性(一)
前言 RabbitMQ虽然有对队列及消息等的一些持久化设置,但其实光光只是这一个是不能够保障数据的可靠性的,下面我们提出这样的质疑: (1)RabbitMQ生产者是不知道自己发布的消息是否已经正确达到 ...
- RabbitMQ之消息持久化(转)
原文地址 https://blog.csdn.net/u013256816/article/details/60875666/ 消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证 ...
- RabbitMQ之消息持久化
消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢——消息持久化. 为了保证RabbitMQ在退出或者crash等异常情况下数据没有丢失,需要将queue,exch ...
随机推荐
- Mybatis中resultType理解
- Pandas存储为Excel格式:单个xlsx文件下多sheet存储方法
Notes If passing an existing ExcelWriter object, then the sheet will be added to the existing workbo ...
- Java从内存流中读取byte数组
Java中通过servlet接收二进制数据,然后将二进制数据流读取为byte数组.开始使用:byte[] bs = new byte[request.getContentLength()];reque ...
- Go语言学习之5 进阶-排序、链表、二叉树、接口
本节主要内容: 1. 结构体和方法2. 接口 1. 结构体和方法 (1). 用来自定义复杂数据结构 (2). struct里面可以包含多个字段(属性) (3). struct类型可以定 ...
- HeadFirst Ruby 第七章总结 references
前言 这一章的内容关于 references,讲了当 Ruby 程序中可能会遇到关于 reference 与 object 之间概念混淆而导致的问题. 导言 本章从一个 astronomer 发现 s ...
- clustering
搞了将近一年的单细胞,聚类也是自认为得心应手了,自信满满. 但是多半是跑软件,对聚类的深层次的思想不甚了了. Google了一下clustering,看了一篇文章,突然了解到了clustering的算 ...
- p1472 Cow Pedigrees
用dp[i][j]记录i个点,组成深度恰好为j的方案数.arr[i][j]记录i个点,深度<=j的方案数.那么dp[i][j]只有i为奇数时不为0.而arr[i][j]等于dp[i][j]的前缀 ...
- canal入门Demo
关于canal具体的原理,以及应用场景,可以参考开发文档:https://github.com/alibaba/canal 下面给出canal的入门Demo (一)部署canal服务器 可以参考官方文 ...
- 【实战问题】【2】Ambiguous mapping found. Cannot map 'xxController.Create' bean method
正文: 启动项目时出现该报错. 原因为:在controller中url映射出现重复,@RequestMapping(value = "user/create"). 解决方案为:全局 ...
- oracle查询视图归属于哪个用户
select OWNER from ALL_VIEWS where VIEW_NAME='视图名';