首页 > 其他分享 >RabbitMQ 入门系列:3、基础含义:持久化、排它性、自动删除、强制性、路由键。

RabbitMQ 入门系列:3、基础含义:持久化、排它性、自动删除、强制性、路由键。

时间:2022-08-21 21:45:08浏览次数:100  
标签:入门 队列 RabbitMQ 交换机 路由 排它 true channel

系列目录

RabbitMQ 入门系列:1、MQ的应用场景的选择与RabbitMQ安装。

RabbitMQ 入门系列:2、基础含义:链接、通道、队列、交换机。

RabbitMQ 入门系列:3、基础含义:持久化、排它性、自动删除、强制性、路由键。

RabbitMQ 入门系列:4、基础编码:官方SDK使用:链接创建、单例改造、发送消息、接收消息。

RabbitMQ 入门系列:5、基础编码:交换机的进阶介绍及编码方式。

RabbitMQ 入门系列:6、保障消息:不丢失:发送方、Rabbit存储端、接收方。

RabbitMQ 入门系列:7、保障消息:不重复消费:产生消息的唯一ID。

RabbitMQ 入门系列:8、扩展内容:接收信息时:可否根据RoutingKey过滤监听信息,答案是不能。

RabbitMQ 入门系列:9、扩展内容:死信队列:真不适合当延时队列。

RabbitMQ 入门系列:10、扩展内容:延时队列:延时队列插件及其有限的适用场景。

前言:

本篇介绍:RabbitMQ 后续编码涉及的基础含义:持久化、排它性、自动删除、强制性、路由键。

1、持久化:参数名:durable,默认值:false

定义队列或定义交换机的时候,涉及该参数。

持久化作用说明:

即将相关队列的消息、或交换机的绑定信息等内容,写入硬盘备份,以便系统故障或重启时,仍可以恢复原来的状态,保障信息不丢失。

缺点:

大量的硬盘写入,会对IO造成不小的影响,因此RabbitMQ的部署环境,应该尽量避免和IO读写频繁的应用在同一磁盘上,比如数据库等。

示例代码:

channel.QueueDeclare("dead",durable:true, false, false);

2、排它性:参数名:exclusive,默认值:true

定义队列的时候,涉及该参数:

排它性的作用说明:

如果该参数为true,则该队列仅允许创建它的连接进行写入或读取,同时当该链接关闭时,该队列被删除。

示例代码:

 //定义队列
    channel.QueueDeclare("dead", durable: true, exclusive: true, false);

 

说明:

该参数为true时,持久化参数是无效的,因为链接关闭即释放队列。

3、自动删除:参数名:autoDelete,默认值:true

定义队列的时候,涉及该参数:

自动删除的作用说明:

如果该参数为true,则最后一名消费者关闭链接时,该队列被删除。

示例:

1、消费者A监听队列,然后关闭链接,则队列被删除;

2、消费者A监听队列、消费者B监听队列、消费者C监听队列,则当全部链接都关闭时,队列被删除。

示例代码:

    //定义队列
    channel.QueueDeclare("dead", durable: true, exclusive: true, autoDelete: true);

 

4、强制性:参数名:mandatory,默认值:false

发布消息的时候,涉及该参数:

强制性的作用说明:

发送的消息,通过交换机,找不到对应队列时:

如果为false:消息会被丢弃。
如果为true:可以通过BasicReturn回调事件,拿到丢失的数据,进行二次处理。

示例代码:

using (var channel = Rabbit.Instance.DefaultConnection.CreateModel())
{
    channel.BasicReturn += (e,a) => { 
    
        //回调事件。
    };
    //定义队列
    channel.QueueDeclare("dead", durable: true, exclusive: true, autoDelete: true);
 
    channel.BasicPublish("", "dead", mandatory:true, null, Encoding.UTF8.GetBytes("6秒就过期了1。"));

}

5、路由键:参数名:routingKey,默认不允许传null,可以传空

定义交换机,或者发布消息时,涉及该参数:

路由键的作用说明:

1、未定义交换机,使用默认direct方式时,发消息消息时:交换机=空值,routingKey=队列名。

2、自定义交换机,也设置routingKey时,发布消息的时:填写对应的交换机名和设置的routingKey。

更多路由键的使用,在交换机进队介绍一文中介绍。

示例代码:

using (var channel = Rabbit.Instance.DefaultConnection.CreateModel())
{
    //定义队列
    channel.QueueDeclare("dead", durable: true, exclusive: true, autoDelete: true);
 
    channel.BasicPublish("", routingKey:"dead", false, null, Encoding.UTF8.GetBytes("6秒就过期了1。"));

}

总结:

本篇介绍RabbitMQ的基础参数含义,在后续的编码中,遇到时候,可以反复回来查看,加深理解。

标签:入门,队列,RabbitMQ,交换机,路由,排它,true,channel
From: https://www.cnblogs.com/cyq1162/p/16609207.html

相关文章

  • Flask 学习-2.url访问地址(路由配置)
    前言通过url地址可以访问一个网页,Flask框架使用route()装饰器来把函数绑定到URL。路由使用route()装饰器来把函数绑定到URL。fromflaskimportFlaskapp=......
  • 关于Vue路由懒加载问题
    今天刚开始新建一个vue项目,就在路由这卡死了,经过多次查找对比,发现了问题竟然是出现在一个括号上,如下所示constroutes=[//正确写法{path:'/',na......
  • spring 整合 rabbitmq
    一、基本配置1、pom添加以下jar<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.7.5</ve......
  • RabbitMQ 入门系列:2、基础含义理解:链接、通道、队列、交换机
    系列目录RabbitMQ入门系列:1、MQ的应用场景的选择与RabbitMQ安装。RabbitMQ入门系列:2、基础含义:链接、通道、队列、交换机。RabbitMQ入门系列:3、基础含义:持久化、......
  • H3C MSR 5600路由器
    http://www.h3c.com/cn/Service/Document_Software/Document_Center/Routers/Catalog/MSR/MSR_5600/......
  • RabbitMQ安装及简单使用
    1.rabbitmq启动rabbitmq路径:/usr/local/rabbitmq_server-3.7.8在rabbitmq安装目录下,进入到sbin目录,执行:#启动rabbitmqrabbitmq-server./rabbitmq-server2.rabbitmq......
  • 基于工业路由器的智能连锁店组网优势
    方案背景: 随着新零售、新消费模式的兴起,为实现降本增效,提高市场竞争力,诸如大型超市、便利店、专卖店、品牌旗舰店等一类传统连锁门店,对于各门店的统一协同管理、资源智......
  • RabbitMQ 发布订阅版本
    publicclassR_MQHelper{///<summary>///获取Rabbitmq连接对象///</summary>///<returns></returns>publicsta......
  • Vue 路由
    Vue路由路由组件通常存放在pages目录,一般组件通常存放在components文件夹通过切换,“隐藏”了的路由组件,默认是被销毁的,需要的时候再去挂载每个组件都有自己的$route......
  • RabbitMQ 入门系列:1、MQ的应用场景的选择与Rabbit安装
    1、MQ的应用场景的选择:可以参考网上的对比图: 遥想当年,MQ都是MSMQ(微软)的,现在,都不在参考图上了。对MQ的使用,根据应用场景,选择适合的MQ即可,本系列仅介绍RabbitMQ。2、......