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 ...
随机推荐
- feature map 大小以及反卷积的理解
(1)边长的计算公式是: output_h =(originalSize_h+padding*2-kernelSize_h)/stride +1 输入图片大小为200×200,依次经过一层卷积(ke ...
- mt19937 -- 高质量随机数
优点:产生速度快, 周期大 用法: #include<bits/stdc++.h> using namespace std; int main() { mt19937 mt_rand(ti ...
- Codeforces 551 E - GukiZ and GukiZiana
E - GukiZ and GukiZiana 思路:分块, 块内二分 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC ...
- Oracle中判断(case when),截取(substr),位置(instr)用法
转自:http://rainbowdesert.iteye.com/blog/1677911 博客分类: SQL 1. 判断(case when) SELECT col1, col2, CASE ...
- selenium Grid2 分布式自动化测试环境搭建
一.Selenium Server 环境配置 1.selenium grid的组成与作用:由一个集线器hub和多个客户机node组成,如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的 ...
- 非常好的 gdb tui 的文章
http://beej.us/guide/bggdb/ Help Commands help command Get help on a certain command apropos keyword ...
- 20165327 2017-2018-2 《Java程序设计》第8周学习总结
20165327 2017-2018-2 <Java程序设计>第8周学习总结 教材内容总结 第十二章 (一)教材学习内容总结 线程是比进程更小的执行单位.一个进程在其执行过程中,可以产生多 ...
- p1460 Healthy Holsteins
列举所有的子集找最优就行. #include <iostream> #include <cstdio> #include <cmath> #include < ...
- How-to: Use HBase Bulk Loading, and Why
How-to: Use HBase Bulk Loading, and Why http://blog.cloudera.com/blog/2013/09/how-to-use-hbase-bulk- ...
- 原生JS实现瀑布流布局
瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部. 1.首先瀑布流所有的图片应该保持宽度一致,高 ...