RabbitMQ系列

RabbitMQ(一)——简介

RabbitMQ(二)——模式类型

RabbitMQ(三)——简单模式

RabbitMQ(四)——工作队列模式

RabbitMQ(五)——发布订阅模式

RabbitMQ(六)——路由模式

RabbitMQ(七)——主题模式

RabbitMQ(八)——消息确认

RabbitMQ(九)——消息持久化

RabbitMQ(十)——消息优先级

前言

  通过前面的学习我们将消息写入队列中都是按顺序写的,消费时也是按顺序进行消费,即队列queue是先进先出的(FIFO),在一些场景中我们需要将某些消息提前处理,首先定义队列时先设置队列为优先队列,然后设置优先等级。

channel.QueueDeclare("Priqueue", true, false, false, new Dictionary<string, object>() { { "x-max-priority",10} });

生产者:

        //初始化工厂
ConnectionFactory factory = new ConnectionFactory()
{
HostName = "127.0.0.1",
UserName = "guest",
Password = "guest"
};
//2.创建连接
using (var connection = factory.CreateConnection())
//3.创建管道
using (var channel = connection.CreateModel())
{
//4.创建交换器
channel.ExchangeDeclare("exchange", "fanout", true);
//定义队列,设置优先级
channel.QueueDeclare("Priqueue", true, false, false, new Dictionary<string, object>() { { "x-max-priority",10} });
//交换器绑定队列
channel.QueueBind("Priqueue", "exchange", "", null); //消息持久化
IBasicProperties basicProperties = channel.CreateBasicProperties();
basicProperties.Persistent = true; string msg = ""; for (int i = 0; i < 10; i++)
{
msg = $"发布消息{i}";
if (i % 2 == 0)
{
msg += "——vip用户消息(优先处理)";
basicProperties.Priority = 9;
}
else
{
msg += "——普通用户消息";
basicProperties.Priority = 1;
}
var body = Encoding.UTF8.GetBytes(msg);
channel.BasicPublish("exchange", "", basicProperties, body);
Console.WriteLine($"发布成功:{msg}");
Thread.Sleep(1000);
}
Console.ReadKey();
}

消费者:

//1.创建连接工厂
ConnectionFactory factory = new ConnectionFactory()
{
HostName = "127.0.0.1",
UserName = "guest",
Password = "guest"
};
//2.创建连接
using (var connection = factory.CreateConnection())
{
//3.创建通道
using (var channel = connection.CreateModel())
{
//4.定义交换器 持久化
channel.ExchangeDeclare("exchange", "fanout",true);
//5.创建匿名队列,绑定交换器 durable:true 持久化 没有被消费不会丢失
var queueName = channel.QueueDeclare("Priqueue", true, false, false, new Dictionary<string, object>() { { "x-max-priority", 10 } });
channel.QueueBind(queueName, "exchange", "",null); //6.创建消费者
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
//接收消息
var body = Encoding.UTF8.GetString(ea.Body.ToArray());
Console.WriteLine($"接收消息:{body.ToString()}");
};
//7.消费消息
channel.BasicConsume(queueName, true, consumer);
Console.ReadKey();
}
}

总结:

  开始生产消息,生产完成后启动消费者控制台,出现以下的效果,消费者会优先消费优先级别高的消息,也就是生产者中定义的vip消息,消费完优先级高的vip消息才去消费优先级低的普通用户的消息。

  

RabbitMQ(十)——消息优先级的更多相关文章

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

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

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

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

  3. SpringBoot | 第三十八章:基于RabbitMQ实现消息延迟队列方案

    前言 前段时间在编写通用的消息通知服务时,由于需要实现类似通知失败时,需要延后几分钟再次进行发送,进行多次尝试后,进入定时发送机制.此机制,在原先对接银联支付时,银联的异步通知也是类似的,在第一次通知 ...

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

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

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

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

  6. RabbitMQ之消息持久化

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

  7. CAF(C++ actor framework)使用随笔(延迟发送,消息转发,消息优先级)(四)

    e). 消息延迟发送(和前面没太大区别直接上代码) #include <iostream> #include "caf/all.hpp" #include " ...

  8. twsited(5)--不同模块用rabbitmq传递消息

    上一章,我们讲到,用redis共享数据,以及用redis中的队列来实现一个简单的消息传递.其实在真实的过程中,不应该用redis来传递,最好用专业的消息队列,我们python中,用到最广泛的就是rab ...

  9. RabbitMQ分布式消息队列服务器(一、Windows下安装和部署)

    RabbitMQ消息队列服务器在Windows下的安装和部署-> 一.Erlang语言环境的搭建 RabbitMQ开源消息队列服务是使用Erlang语言开发的,因此我们要使用他就必须先进行Erl ...

  10. RabbitMQ入门-消息派发那些事儿

    在上篇<RabbitMQ-高效的Work模式>中,我们了解了Work模型,该模型包括一个生产者,一个消息队列和多个消费者. 我们已经通过实例看出消息队列中的消息是如何被一个或者多个消费者消 ...

随机推荐

  1. SharpZipLib解压.tar.gz

    上一篇文章我们说了如何用SharpZipLib来压缩.tar.gz,这篇文章我们来看看如何解压. 直接上代码: using ICSharpCode.SharpZipLib.GZip; using IC ...

  2. 限流中间件IpRateLimitMiddleware的使用

    前言 IpRateLimitMiddleware(Github: AspNetCoreRateLimit) 是ASPNETCore的一个限流的中间件,用于控制客户端调用API的频次, 如果客户端频繁访 ...

  3. 服务迁移之《tomcat性能优化》

    删除无用的connector,因为一般的tomcat前面都会挂有nginx服务 增加connnector使用的线程池的数量 删除没有用的listener host优化项:autoDeploy设置为fa ...

  4. vs2017 iisexpress 绑定自定义域名

    1.项目根目录找到 项目/.vs/config/applicationhost.config 2.添加绑定域名 <site name="demo" id="2&qu ...

  5. Solution -「NOI 2017」「洛谷 P3823」蚯蚓排队

    \(\mathscr{Description}\)   Link.   (自己看题, 我总不能让题意比题解还长吧?) \(\mathscr{Solution}\)   下一组我一定写成 solutio ...

  6. web应用分页-copy

    1. 场景描述 目前大部分的应用程序中都会用到分页功能,以便减少前端浏览器及后台服务器的压力,以及其他方面的考虑. (1)分页从概念上可分为逻辑分页和物理分页,逻辑分页主要是通过应用程序(前端或者后端 ...

  7. Jdk8新特性目录总结

    --------------------------------------- Lambda表达式 接口新增方法 四大函数式接口 方法引用 Stream(1) Stream(2) Stream(3) ...

  8. biancheng-Spring MVC

    MVC设计模式简介 http://c.biancheng.net/spring_mvc/ MVC 设计模式一般指 MVC 框架,M(Model)指数据模型层,V(View)指视图层,C(Control ...

  9. Ubuntu更改用户名

    网上给出Ubuntu更改用户名步骤: 1.进入Ubuntu,打开一个终端,输入 sudo su转为root用户. 注意,必须先转为root用户!!! 2.gedit /etc/passwd ,找到代表 ...

  10. 基础《Go学习笔记》读书笔记——函数

    writer:zgx lastmodify:2020年09月26日 目录 第四章--函数 变参 返回值 匿名函数 闭包 延迟调用 误用 性能 错误处理 error panic, recover Dra ...